1
|
|
|
//v.3.6 build 131023 |
2
|
|
|
|
3
|
|
|
/* |
4
|
|
|
Copyright DHTMLX LTD. http://www.dhtmlx.com |
5
|
|
|
You allowed to use this component or parts of it under GPL terms |
6
|
|
|
To use it on other terms or get Professional edition of the component please contact us at [email protected] |
7
|
|
|
*/ |
8
|
|
|
/*_TOPICS_ |
9
|
|
|
@0:Initialization |
10
|
|
|
@1:Selection control |
11
|
|
|
@2:Add/delete |
12
|
|
|
@3:Private |
13
|
|
|
@4:Node/level control |
14
|
|
|
@5:Checkboxes/user data manipulation |
15
|
|
|
@6:Appearence control |
16
|
|
|
@7: Handlers |
17
|
|
|
*/ |
18
|
|
|
|
19
|
|
|
function xmlPointer(data){ |
20
|
|
|
this.d=data; |
21
|
|
|
} |
22
|
|
|
xmlPointer.prototype={ |
23
|
|
|
text:function(){ if (!_isFF) return this.d.xml; var x = new XMLSerializer(); return x.serializeToString(this.d); }, |
24
|
|
|
get:function(name){return this.d.getAttribute(name); }, |
25
|
|
|
exists:function(){return !!this.d }, |
26
|
|
|
content:function(){return this.d.firstChild?this.d.firstChild.data:""; }, // <4k in FF |
27
|
|
|
each:function(name,f,t,i){ var a=this.d.childNodes; var c=new xmlPointer(); if (a.length) for (i=i||0; i<a.length; i++) if (a[i].tagName==name) { c.d=a[i]; if(f.apply(t,[c,i])==-1) return; } }, |
28
|
|
|
get_all:function(){ var a={}; var b=this.d.attributes; for (var i=0; i<b.length; i++) a[b[i].name]=b[i].value; return a; }, |
29
|
|
|
sub:function(name){ var a=this.d.childNodes; var c=new xmlPointer(); if (a.length) for (var i=0; i<a.length; i++) if (a[i].tagName==name) { c.d=a[i]; return c; } }, |
30
|
|
|
up:function(name){ return new xmlPointer(this.d.parentNode); }, |
31
|
|
|
set:function(name,val){ this.d.setAttribute(name,val); }, |
32
|
|
|
clone:function(name){ return new xmlPointer(this.d); }, |
33
|
|
|
sub_exists:function(name){ var a=this.d.childNodes; if (a.length) for (var i=0; i<a.length; i++) if (a[i].tagName==name) return true; return false; }, |
34
|
|
|
through:function(name,rule,v,f,t){ var a=this.d.childNodes; if (a.length) for (var i=0; i<a.length; i++) { if (a[i].tagName==name && a[i].getAttribute(rule)!=null && a[i].getAttribute(rule)!="" && (!v || a[i].getAttribute(rule)==v )) { var c=new xmlPointer(a[i]); f.apply(t,[c,i]); } var w=this.d; this.d=a[i]; this.through(name,rule,v,f,t); this.d=w; } } |
35
|
|
|
} |
36
|
|
|
|
37
|
|
|
|
38
|
|
|
|
39
|
|
|
/** |
40
|
|
|
* @desc: tree constructor |
41
|
|
|
* @param: htmlObject - parent html object or id of parent html object |
42
|
|
|
* @param: width - tree width |
43
|
|
|
* @param: height - tree height |
44
|
|
|
* @param: rootId - id of virtual root node (same as tree node id attribute in xml) |
45
|
|
|
* @type: public |
46
|
|
|
* @topic: 0 |
47
|
|
|
*/ |
48
|
|
|
function dhtmlXTreeObject(htmlObject, width, height, rootId){ |
49
|
|
|
if (_isIE) try { document.execCommand("BackgroundImageCache", false, true); } catch (e){} |
|
|
|
|
50
|
|
|
if (typeof(htmlObject)!="object") |
51
|
|
|
this.parentObject=document.getElementById(htmlObject); |
52
|
|
|
else |
53
|
|
|
this.parentObject=htmlObject; |
54
|
|
|
|
55
|
|
|
this.parentObject.style.overflow="hidden"; |
56
|
|
|
this._itim_dg=true; |
57
|
|
|
this.dlmtr=","; |
58
|
|
|
this.dropLower=false; |
59
|
|
|
this.enableIEImageFix(); |
60
|
|
|
|
61
|
|
|
this.xmlstate=0; |
62
|
|
|
this.mytype="tree"; |
63
|
|
|
this.smcheck=true; //smart checkboxes |
64
|
|
|
this.width=width; |
65
|
|
|
this.height=height; |
66
|
|
|
this.rootId=rootId; |
67
|
|
|
this.childCalc=null; |
68
|
|
|
this.def_img_x="18px"; |
69
|
|
|
this.def_img_y="18px"; |
70
|
|
|
this.def_line_img_x="18px"; |
71
|
|
|
this.def_line_img_y="18px"; |
72
|
|
|
|
73
|
|
|
this._dragged=new Array(); |
74
|
|
|
this._selected=new Array(); |
75
|
|
|
|
76
|
|
|
this.style_pointer="pointer"; |
77
|
|
|
|
78
|
|
|
this._aimgs=true; |
79
|
|
|
this.htmlcA=" ["; |
80
|
|
|
this.htmlcB="]"; |
81
|
|
|
this.lWin=window; |
82
|
|
|
this.cMenu=0; |
83
|
|
|
this.mlitems=0; |
84
|
|
|
this.iconURL=""; |
85
|
|
|
this.dadmode=0; |
86
|
|
|
this.slowParse=false; |
87
|
|
|
this.autoScroll=true; |
88
|
|
|
this.hfMode=0; |
89
|
|
|
this.nodeCut=new Array(); |
90
|
|
|
this.XMLsource=0; |
91
|
|
|
this.XMLloadingWarning=0; |
92
|
|
|
this._idpull={}; |
93
|
|
|
this._pullSize=0; |
94
|
|
|
this.treeLinesOn=true; |
95
|
|
|
this.tscheck=false; |
96
|
|
|
this.timgen=true; |
97
|
|
|
this.dpcpy=false; |
98
|
|
|
this._ld_id=null; |
99
|
|
|
this._oie_onXLE=[]; |
100
|
|
|
this.imPath=window.dhx_globalImgPath||""; |
101
|
|
|
this.checkArray=new Array("iconUncheckAll.gif","iconCheckAll.gif","iconCheckGray.gif","iconUncheckDis.gif","iconCheckDis.gif","iconCheckDis.gif"); |
102
|
|
|
this.radioArray=new Array("radio_off.gif","radio_on.gif","radio_on.gif","radio_off.gif","radio_on.gif","radio_on.gif"); |
103
|
|
|
|
104
|
|
|
this.lineArray=new Array("line2.gif","line3.gif","line4.gif","blank.gif","blank.gif","line1.gif"); |
105
|
|
|
this.minusArray=new Array("minus2.gif","minus3.gif","minus4.gif","minus.gif","minus5.gif"); |
106
|
|
|
this.plusArray=new Array("plus2.gif","plus3.gif","plus4.gif","plus.gif","plus5.gif"); |
107
|
|
|
this.imageArray=new Array("leaf.gif","folderOpen.gif","folderClosed.gif"); |
108
|
|
|
this.cutImg= new Array(0,0,0); |
109
|
|
|
this.cutImage="but_cut.gif"; |
110
|
|
|
|
111
|
|
|
dhtmlxEventable(this); |
112
|
|
|
|
113
|
|
|
this.dragger= new dhtmlDragAndDropObject(); |
114
|
|
|
//create root |
115
|
|
|
this.htmlNode=new dhtmlXTreeItemObject(this.rootId,"",0,this); |
116
|
|
|
this.htmlNode.htmlNode.childNodes[0].childNodes[0].style.display="none"; |
117
|
|
|
this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[0].className="hiddenRow"; |
118
|
|
|
//init tree structures |
119
|
|
|
this.allTree=this._createSelf(); |
120
|
|
|
this.allTree.appendChild(this.htmlNode.htmlNode); |
121
|
|
|
|
122
|
|
|
if (dhtmlx.$customScroll) |
123
|
|
|
dhtmlx.CustomScroll.enable(this); |
124
|
|
|
|
125
|
|
|
if(_isFF){ |
126
|
|
|
this.allTree.childNodes[0].width="100%"; |
127
|
|
|
this.allTree.childNodes[0].style.overflow="hidden"; |
128
|
|
|
} |
129
|
|
|
|
130
|
|
|
var self=this; |
131
|
|
|
this.allTree.onselectstart=new Function("return false;"); |
|
|
|
|
132
|
|
|
if (_isMacOS) |
133
|
|
|
this.allTree.oncontextmenu = function(e){ |
134
|
|
|
return self._doContClick(e||window.event, true); |
135
|
|
|
}; |
136
|
|
|
this.allTree.onmousedown = function(e){ return self._doContClick(e||window.event); }; |
137
|
|
|
|
138
|
|
|
this.XMLLoader=new dtmlXMLLoaderObject(this._parseXMLTree,this,true,this.no_cashe); |
139
|
|
|
if (_isIE) this.preventIECashing(true); |
140
|
|
|
|
141
|
|
|
|
142
|
|
|
|
143
|
|
|
|
144
|
|
|
if (window.addEventListener) window.addEventListener("unload",function(){try{ self.destructor(); } catch(e){}},false); |
|
|
|
|
145
|
|
|
if (window.attachEvent) window.attachEvent("onunload",function(){ try{ self.destructor(); } catch(e){}}); |
|
|
|
|
146
|
|
|
|
147
|
|
|
this.setImagesPath=this.setImagePath; |
148
|
|
|
this.setIconsPath=this.setIconPath; |
149
|
|
|
|
150
|
|
|
if (dhtmlx.image_path) this.setImagePath(dhtmlx.image_path); |
151
|
|
|
if (dhtmlx.skin) this.setSkin(dhtmlx.skin); |
152
|
|
|
|
153
|
|
|
return this; |
154
|
|
|
}; |
155
|
|
|
|
156
|
|
|
|
157
|
|
|
/** |
158
|
|
|
* @desc: set default data transfer mode |
159
|
|
|
* @param: mode - data mode (json,xml,csv) |
160
|
|
|
* @type: public |
161
|
|
|
* @topic: 0 |
162
|
|
|
*/ |
163
|
|
|
dhtmlXTreeObject.prototype.setDataMode=function(mode){ |
164
|
|
|
this._datamode=mode; |
165
|
|
|
} |
166
|
|
|
|
167
|
|
|
|
168
|
|
|
|
169
|
|
|
dhtmlXTreeObject.prototype._doContClick=function(ev, force){ |
170
|
|
|
if (!force && ev.button!=2) { |
171
|
|
|
if(this._acMenu){ |
172
|
|
|
if (this._acMenu.hideContextMenu) |
173
|
|
|
this._acMenu.hideContextMenu() |
174
|
|
|
else |
175
|
|
|
this.cMenu._contextEnd(); |
176
|
|
|
} |
177
|
|
|
return true; |
178
|
|
|
} |
179
|
|
|
|
180
|
|
|
|
181
|
|
|
|
182
|
|
|
|
183
|
|
|
var el=(_isIE?ev.srcElement:ev.target); |
184
|
|
|
while ((el)&&(el.tagName!="BODY")) { |
185
|
|
|
if (el.parentObject) break; |
186
|
|
|
el=el.parentNode; |
187
|
|
|
} |
188
|
|
|
|
189
|
|
|
if ((!el)||(!el.parentObject)) return true; |
190
|
|
|
|
191
|
|
|
var obj=el.parentObject; |
192
|
|
|
|
193
|
|
|
if (!this.callEvent("onRightClick",[obj.id,ev])) |
194
|
|
|
(ev.srcElement||ev.target).oncontextmenu = function(e){ (e||event).cancelBubble=true; return false; }; |
195
|
|
|
|
196
|
|
|
this._acMenu=(obj.cMenu||this.cMenu); |
197
|
|
|
if (this._acMenu){ |
198
|
|
|
if (!(this.callEvent("onBeforeContextMenu", [ |
199
|
|
|
obj.id |
200
|
|
|
]))) return true; |
201
|
|
|
if(!_isMacOS) |
202
|
|
|
(ev.srcElement||ev.target).oncontextmenu = function(e){ (e||event).cancelBubble=true; return false; }; |
203
|
|
|
|
204
|
|
|
if (this._acMenu.showContextMenu){ |
205
|
|
|
|
206
|
|
|
var dEl0=window.document.documentElement; |
207
|
|
|
var dEl1=window.document.body; |
208
|
|
|
var corrector = new Array((dEl0.scrollLeft||dEl1.scrollLeft),(dEl0.scrollTop||dEl1.scrollTop)); |
209
|
|
|
if (_isIE){ |
210
|
|
|
var x= ev.clientX+corrector[0]; |
211
|
|
|
var y = ev.clientY+corrector[1]; |
212
|
|
|
} else { |
213
|
|
|
var x= ev.pageX; |
214
|
|
|
var y = ev.pageY; |
215
|
|
|
} |
216
|
|
|
|
217
|
|
|
this._acMenu.showContextMenu(x-1,y-1) |
218
|
|
|
this.contextID=obj.id; |
219
|
|
|
ev.cancelBubble=true; |
220
|
|
|
this._acMenu._skip_hide=true; |
221
|
|
|
} else { |
222
|
|
|
el.contextMenuId=obj.id; |
223
|
|
|
el.contextMenu=this._acMenu; |
224
|
|
|
el.a=this._acMenu._contextStart; |
225
|
|
|
el.a(el, ev); |
226
|
|
|
el.a=null; |
227
|
|
|
} |
228
|
|
|
|
229
|
|
|
return false; |
230
|
|
|
} |
231
|
|
|
return true; |
232
|
|
|
} |
233
|
|
|
|
234
|
|
|
|
235
|
|
|
/** |
236
|
|
|
* @desc: replace IMG tag with background images - solve problem with IE image caching , not works for IE6 SP1 |
237
|
|
|
* @param: mode - true/false - enable/disable fix |
238
|
|
|
* @type: public |
239
|
|
|
* @topic: 0 |
240
|
|
|
*/ |
241
|
|
|
dhtmlXTreeObject.prototype.enableIEImageFix=function(mode){ |
242
|
|
|
if (!mode){ |
243
|
|
|
|
244
|
|
|
this._getImg=function(id){ return document.createElement((id==this.rootId)?"div":"img"); } |
245
|
|
|
this._setSrc=function(a,b){ a.src=b; } |
246
|
|
|
this._getSrc=function(a){ return a.src; } |
247
|
|
|
} else { |
248
|
|
|
|
249
|
|
|
this._getImg=function(){ var z=document.createElement("DIV"); z.innerHTML=" "; z.className="dhx_bg_img_fix"; return z; } |
250
|
|
|
this._setSrc=function(a,b){ a.style.backgroundImage="url("+b+")"; } |
251
|
|
|
this._getSrc=function(a){ var z=a.style.backgroundImage; return z.substr(4,z.length-5).replace(/(^")|("$)/g,""); } |
252
|
|
|
} |
253
|
|
|
} |
254
|
|
|
|
255
|
|
|
/** |
256
|
|
|
* @desc: deletes tree and clears memory |
257
|
|
|
* @type: public |
258
|
|
|
*/ |
259
|
|
|
dhtmlXTreeObject.prototype.destructor=function(){ |
260
|
|
|
for (var a in this._idpull){ |
261
|
|
|
var z=this._idpull[a]; |
262
|
|
|
if (!z) continue; |
263
|
|
|
z.parentObject=null;z.treeNod=null;z.childNodes=null;z.span=null;z.tr.nodem=null;z.tr=null;z.htmlNode.objBelong=null;z.htmlNode=null; |
264
|
|
|
this._idpull[a]=null; |
265
|
|
|
} |
266
|
|
|
this.parentObject.innerHTML=""; |
267
|
|
|
|
268
|
|
|
if(this.XMLLoader) |
269
|
|
|
this.XMLLoader.destructor(); |
270
|
|
|
|
271
|
|
|
this.allTree.onselectstart = null; |
272
|
|
|
this.allTree.oncontextmenu = null; |
273
|
|
|
this.allTree.onmousedown = null; |
274
|
|
|
|
275
|
|
|
for(var a in this){ |
276
|
|
|
this[a]=null; |
277
|
|
|
} |
278
|
|
|
} |
279
|
|
|
|
280
|
|
|
function cObject(){ |
281
|
|
|
return this; |
282
|
|
|
} |
283
|
|
|
cObject.prototype= new Object; |
284
|
|
|
cObject.prototype.clone = function () { |
285
|
|
|
function _dummy(){}; |
286
|
|
|
_dummy.prototype=this; |
287
|
|
|
return new _dummy(); |
288
|
|
|
} |
289
|
|
|
|
290
|
|
|
/** |
291
|
|
|
* @desc: tree node constructor |
292
|
|
|
* @param: itemId - node id |
293
|
|
|
* @param: itemText - node label |
294
|
|
|
* @param: parentObject - parent item object |
295
|
|
|
* @param: treeObject - tree object |
296
|
|
|
* @param: actionHandler - onclick event handler(optional) |
297
|
|
|
* @param: mode - do not show images |
298
|
|
|
* @type: private |
299
|
|
|
* @topic: 0 |
300
|
|
|
*/ |
301
|
|
View Code Duplication |
function dhtmlXTreeItemObject(itemId,itemText,parentObject,treeObject,actionHandler,mode){ |
302
|
|
|
this.htmlNode=""; |
303
|
|
|
this.acolor=""; |
304
|
|
|
this.scolor=""; |
305
|
|
|
this.tr=0; |
306
|
|
|
this.childsCount=0; |
307
|
|
|
this.tempDOMM=0; |
308
|
|
|
this.tempDOMU=0; |
309
|
|
|
this.dragSpan=0; |
310
|
|
|
this.dragMove=0; |
311
|
|
|
this.span=0; |
312
|
|
|
this.closeble=1; |
313
|
|
|
this.childNodes=new Array(); |
314
|
|
|
this.userData=new cObject(); |
315
|
|
|
|
316
|
|
|
|
317
|
|
|
this.checkstate=0; |
318
|
|
|
this.treeNod=treeObject; |
319
|
|
|
this.label=itemText; |
320
|
|
|
this.parentObject=parentObject; |
321
|
|
|
this.actionHandler=actionHandler; |
322
|
|
|
this.images=new Array(treeObject.imageArray[0],treeObject.imageArray[1],treeObject.imageArray[2]); |
323
|
|
|
|
324
|
|
|
|
325
|
|
|
this.id=treeObject._globalIdStorageAdd(itemId,this); |
326
|
|
|
if (this.treeNod.checkBoxOff ) this.htmlNode=this.treeNod._createItem(1,this,mode); |
327
|
|
|
else this.htmlNode=this.treeNod._createItem(0,this,mode); |
328
|
|
|
|
329
|
|
|
this.htmlNode.objBelong=this; |
330
|
|
|
return this; |
331
|
|
|
}; |
332
|
|
|
|
333
|
|
|
|
334
|
|
|
/** |
335
|
|
|
* @desc: register node |
336
|
|
|
* @type: private |
337
|
|
|
* @param: itemId - node id |
338
|
|
|
* @param: itemObject - node object |
339
|
|
|
* @topic: 3 |
340
|
|
|
*/ |
341
|
|
|
dhtmlXTreeObject.prototype._globalIdStorageAdd=function(itemId,itemObject){ |
342
|
|
|
if (this._globalIdStorageFind(itemId,1,1)) { itemId=itemId +"_"+(new Date()).valueOf(); return this._globalIdStorageAdd(itemId,itemObject); } |
343
|
|
|
this._idpull[itemId]=itemObject; |
344
|
|
|
this._pullSize++; |
345
|
|
|
return itemId; |
346
|
|
|
}; |
347
|
|
|
|
348
|
|
|
/** |
349
|
|
|
* @desc: unregister node |
350
|
|
|
* @type: private |
351
|
|
|
* @param: itemId - node id |
352
|
|
|
* @topic: 3 |
353
|
|
|
*/ |
354
|
|
|
dhtmlXTreeObject.prototype._globalIdStorageSub=function(itemId){ |
355
|
|
|
if (this._idpull[itemId]){ |
356
|
|
|
this._unselectItem(this._idpull[itemId]); |
357
|
|
|
this._idpull[itemId]=null; |
358
|
|
|
this._pullSize--; |
359
|
|
|
} |
360
|
|
|
if ((this._locker)&&(this._locker[itemId])) this._locker[itemId]=false; |
361
|
|
|
}; |
362
|
|
|
|
363
|
|
|
/** |
364
|
|
|
* @desc: return node object |
365
|
|
|
* @param: itemId - node id |
366
|
|
|
* @type: private |
367
|
|
|
* @topic: 3 |
368
|
|
|
*/ |
369
|
|
|
dhtmlXTreeObject.prototype._globalIdStorageFind=function(itemId,skipXMLSearch,skipParsing,isreparse){ |
370
|
|
|
var z=this._idpull[itemId] |
371
|
|
|
if (z){ |
372
|
|
|
|
373
|
|
|
return z; |
374
|
|
|
} |
375
|
|
|
|
376
|
|
|
return null; |
377
|
|
|
}; |
378
|
|
|
|
379
|
|
|
|
380
|
|
|
/** |
381
|
|
|
* @desc: escape string |
382
|
|
|
* @param: itemId - item ID |
383
|
|
|
* @type: private |
384
|
|
|
* @topic: 3 |
385
|
|
|
*/ |
386
|
|
|
dhtmlXTreeObject.prototype._escape=function(str){ |
387
|
|
|
switch(this.utfesc){ |
388
|
|
|
case "none": |
389
|
|
|
return str; |
390
|
|
|
break; |
|
|
|
|
391
|
|
|
case "utf8": |
392
|
|
|
return encodeURIComponent(str); |
393
|
|
|
break; |
|
|
|
|
394
|
|
|
default: |
395
|
|
|
return escape(str); |
396
|
|
|
break; |
|
|
|
|
397
|
|
|
} |
398
|
|
|
} |
399
|
|
|
|
400
|
|
|
|
401
|
|
|
|
402
|
|
|
/** |
403
|
|
|
* @desc: create and return new line in tree |
404
|
|
|
* @type: private |
405
|
|
|
* @param: htmlObject - parent Node object |
406
|
|
|
* @param: node - item object |
407
|
|
|
* @topic: 2 |
408
|
|
|
*/ |
409
|
|
|
dhtmlXTreeObject.prototype._drawNewTr=function(htmlObject,node) |
410
|
|
|
{ |
411
|
|
|
var tr =document.createElement('tr'); |
412
|
|
|
var td1=document.createElement('td'); |
413
|
|
|
var td2=document.createElement('td'); |
414
|
|
|
td1.appendChild(document.createTextNode(" ")); |
415
|
|
|
td2.colSpan=3; |
416
|
|
|
td2.appendChild(htmlObject); |
417
|
|
|
tr.appendChild(td1); tr.appendChild(td2); |
418
|
|
|
return tr; |
419
|
|
|
}; |
420
|
|
|
/** |
421
|
|
|
* @desc: load tree from xml string |
422
|
|
|
* @type: public |
423
|
|
|
* @param: xmlString - XML string |
424
|
|
|
* @param: afterCall - function which will be called after xml loading |
425
|
|
|
* @topic: 0 |
426
|
|
|
*/ |
427
|
|
|
dhtmlXTreeObject.prototype.loadXMLString=function(xmlString,afterCall){ |
428
|
|
|
var that=this; |
429
|
|
|
if (!this.parsCount) this.callEvent("onXLS",[that,null]); |
430
|
|
|
this.xmlstate=1; |
431
|
|
|
|
432
|
|
|
if (afterCall) this.XMLLoader.waitCall=afterCall; |
433
|
|
|
this.XMLLoader.loadXMLString(xmlString); }; |
434
|
|
|
/** |
435
|
|
|
* @desc: load tree from xml file |
436
|
|
|
* @type: public |
437
|
|
|
* @param: file - link to XML file |
438
|
|
|
* @param: afterCall - function which will be called after xml loading |
439
|
|
|
* @topic: 0 |
440
|
|
|
*/ |
441
|
|
View Code Duplication |
dhtmlXTreeObject.prototype.loadXML=function(file,afterCall){ |
442
|
|
|
afterCall = afterCall || this.AJAX_callback; |
443
|
|
|
if (this._datamode && this._datamode!="xml") return this["load"+this._datamode.toUpperCase()](file,afterCall); |
444
|
|
|
var that=this; |
445
|
|
|
if (!this.parsCount) this.callEvent("onXLS",[that,this._ld_id]); |
446
|
|
|
this._ld_id=null; |
447
|
|
|
this.xmlstate=1; |
448
|
|
|
this.XMLLoader=new dtmlXMLLoaderObject(this._parseXMLTree,this,true,this.no_cashe); |
449
|
|
|
|
450
|
|
|
if (afterCall) this.XMLLoader.waitCall=afterCall; |
451
|
|
|
this.XMLLoader.loadXML(file); |
452
|
|
|
}; |
453
|
|
|
/** |
454
|
|
|
* @desc: create new child node |
455
|
|
|
* @type: private |
456
|
|
|
* @param: parentObject - parent node object |
457
|
|
|
* @param: itemId - new node id |
458
|
|
|
* @param: itemText - new node text |
459
|
|
|
* @param: itemActionHandler - function fired on node select event |
460
|
|
|
* @param: image1 - image for node without children; |
461
|
|
|
* @param: image2 - image for closed node; |
462
|
|
|
* @param: image3 - image for opened node |
463
|
|
|
* @param: optionStr - string of otions |
464
|
|
|
* @param: childs - node childs flag (for dynamical trees) (optional) |
465
|
|
|
* @param: beforeNode - node, after which new node will be inserted (optional) |
466
|
|
|
* @topic: 2 |
467
|
|
|
*/ |
468
|
|
|
dhtmlXTreeObject.prototype._attachChildNode=function(parentObject,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,childs,beforeNode,afterNode){ |
469
|
|
|
|
470
|
|
|
if (beforeNode && beforeNode.parentObject) parentObject=beforeNode.parentObject; |
471
|
|
|
if (((parentObject.XMLload==0)&&(this.XMLsource))&&(!this.XMLloadingWarning)) |
472
|
|
|
{ |
473
|
|
|
parentObject.XMLload=1; |
474
|
|
|
this._loadDynXML(parentObject.id); |
475
|
|
|
|
476
|
|
|
} |
477
|
|
|
|
478
|
|
|
var Count=parentObject.childsCount; |
479
|
|
|
var Nodes=parentObject.childNodes; |
480
|
|
|
|
481
|
|
|
|
482
|
|
|
if (afterNode && afterNode.tr.previousSibling){ |
483
|
|
|
if (afterNode.tr.previousSibling.previousSibling){ |
484
|
|
|
beforeNode=afterNode.tr.previousSibling.nodem; |
485
|
|
|
} |
486
|
|
|
else |
487
|
|
|
optionStr=optionStr.replace("TOP","")+",TOP"; |
488
|
|
|
} |
489
|
|
|
|
490
|
|
|
if (beforeNode) |
491
|
|
|
{ |
492
|
|
|
var ik,jk; |
493
|
|
|
for (ik=0; ik<Count; ik++) |
494
|
|
|
if (Nodes[ik]==beforeNode) |
495
|
|
|
{ |
496
|
|
|
for (jk=Count; jk!=ik; jk--) |
497
|
|
|
Nodes[1+jk]=Nodes[jk]; |
498
|
|
|
break; |
499
|
|
|
} |
500
|
|
|
ik++; |
|
|
|
|
501
|
|
|
Count=ik; |
502
|
|
|
} |
503
|
|
|
|
504
|
|
|
|
505
|
|
|
if (optionStr) { |
506
|
|
|
var tempStr=optionStr.split(","); |
507
|
|
|
for (var i=0; i<tempStr.length; i++) |
508
|
|
|
{ |
509
|
|
|
switch(tempStr[i]) |
510
|
|
|
{ |
511
|
|
|
case "TOP": if (parentObject.childsCount>0) { beforeNode=new Object; beforeNode.tr=parentObject.childNodes[0].tr.previousSibling; } |
512
|
|
|
parentObject._has_top=true; |
513
|
|
|
for (ik=Count; ik>0; ik--) |
514
|
|
|
Nodes[ik]=Nodes[ik-1]; |
515
|
|
|
Count=0; |
516
|
|
|
break; |
517
|
|
|
} |
518
|
|
|
}; |
519
|
|
|
}; |
520
|
|
|
|
521
|
|
|
var n; |
522
|
|
|
if (!(n=this._idpull[itemId]) || n.span!=-1){ |
523
|
|
|
n=Nodes[Count]=new dhtmlXTreeItemObject(itemId,itemText,parentObject,this,itemActionHandler,1); |
524
|
|
|
itemId = Nodes[Count].id; |
525
|
|
|
parentObject.childsCount++; |
526
|
|
|
} |
527
|
|
|
|
528
|
|
|
if(!n.htmlNode) { |
529
|
|
|
n.label=itemText; |
530
|
|
|
n.htmlNode=this._createItem((this.checkBoxOff?1:0),n); |
531
|
|
|
n.htmlNode.objBelong=n; |
532
|
|
|
} |
533
|
|
|
|
534
|
|
|
if(image1) n.images[0]=image1; |
535
|
|
|
if(image2) n.images[1]=image2; |
536
|
|
|
if(image3) n.images[2]=image3; |
537
|
|
|
|
538
|
|
|
|
539
|
|
|
var tr=this._drawNewTr(n.htmlNode); |
540
|
|
|
if ((this.XMLloadingWarning)||(this._hAdI)) |
541
|
|
|
n.htmlNode.parentNode.parentNode.style.display="none"; |
542
|
|
|
|
543
|
|
|
|
544
|
|
|
if ((beforeNode)&&beforeNode.tr&&(beforeNode.tr.nextSibling)) |
545
|
|
|
parentObject.htmlNode.childNodes[0].insertBefore(tr,beforeNode.tr.nextSibling); |
546
|
|
|
else |
547
|
|
|
if (this.parsingOn==parentObject.id){ |
548
|
|
|
this.parsedArray[this.parsedArray.length]=tr; |
549
|
|
|
} |
550
|
|
|
else |
551
|
|
|
parentObject.htmlNode.childNodes[0].appendChild(tr); |
552
|
|
|
|
553
|
|
|
|
554
|
|
|
if ((beforeNode)&&(!beforeNode.span)) beforeNode=null; |
555
|
|
|
|
556
|
|
|
if (this.XMLsource) if ((childs)&&(childs!=0)) n.XMLload=0; else n.XMLload=1; |
557
|
|
|
n.tr=tr; |
558
|
|
|
tr.nodem=n; |
559
|
|
|
|
560
|
|
|
if (parentObject.itemId==0) |
561
|
|
|
tr.childNodes[0].className="hiddenRow"; |
562
|
|
|
|
563
|
|
|
if ((parentObject._r_logic)||(this._frbtr)) |
564
|
|
|
this._setSrc(n.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0],this.imPath+this.radioArray[0]); |
565
|
|
|
|
566
|
|
|
|
567
|
|
|
if (optionStr) { |
568
|
|
|
var tempStr=optionStr.split(","); |
569
|
|
|
|
570
|
|
|
for (var i=0; i<tempStr.length; i++) |
571
|
|
|
{ |
572
|
|
|
switch(tempStr[i]) |
573
|
|
|
{ |
574
|
|
|
case "SELECT": this.selectItem(itemId,false); break; |
575
|
|
|
case "CALL": this.selectItem(itemId,true); break; |
576
|
|
|
case "CHILD": n.XMLload=0; break; |
577
|
|
|
case "CHECKED": |
578
|
|
|
if (this.XMLloadingWarning) |
579
|
|
|
this.setCheckList+=this.dlmtr+itemId; |
580
|
|
|
else |
581
|
|
|
this.setCheck(itemId,1); |
582
|
|
|
break; |
583
|
|
|
case "HCHECKED": |
584
|
|
|
this._setCheck(n,"unsure"); |
585
|
|
|
break; |
586
|
|
|
case "OPEN": n.openMe=1; break; |
587
|
|
|
} |
588
|
|
|
}; |
589
|
|
|
}; |
590
|
|
|
|
591
|
|
|
if (!this.XMLloadingWarning) |
592
|
|
|
{ |
593
|
|
|
if ((this._getOpenState(parentObject)<0)&&(!this._hAdI)) this.openItem(parentObject.id); |
594
|
|
|
|
595
|
|
|
if (beforeNode) |
596
|
|
|
{ |
597
|
|
|
this._correctPlus(beforeNode); |
598
|
|
|
this._correctLine(beforeNode); |
599
|
|
|
} |
600
|
|
|
this._correctPlus(parentObject); |
601
|
|
|
this._correctLine(parentObject); |
602
|
|
|
this._correctPlus(n); |
603
|
|
|
if (parentObject.childsCount>=2) |
604
|
|
|
{ |
605
|
|
|
this._correctPlus(Nodes[parentObject.childsCount-2]); |
606
|
|
|
this._correctLine(Nodes[parentObject.childsCount-2]); |
607
|
|
|
} |
608
|
|
|
if (parentObject.childsCount!=2) this._correctPlus(Nodes[0]); |
609
|
|
|
|
610
|
|
|
if (this.tscheck) this._correctCheckStates(parentObject); |
611
|
|
|
|
612
|
|
|
if (this._onradh){ |
613
|
|
|
if (this.xmlstate==1){ |
614
|
|
|
var old=this.onXLE; |
615
|
|
|
this.onXLE=function(id){ this._onradh(itemId); if (old) old(id); } |
616
|
|
|
} |
617
|
|
|
else |
618
|
|
|
this._onradh(itemId); |
619
|
|
|
} |
620
|
|
|
|
621
|
|
|
} |
622
|
|
|
return n; |
623
|
|
|
}; |
624
|
|
|
|
625
|
|
|
|
626
|
|
|
|
627
|
|
|
|
628
|
|
|
/** |
629
|
|
|
* @desc: create new node as a child to specified with parentId |
630
|
|
|
* @type: deprecated |
631
|
|
|
* @param: parentId - parent node id |
632
|
|
|
* @param: itemId - new node id |
633
|
|
|
* @param: itemText - new node text |
634
|
|
|
* @param: itemActionHandler - function fired on node select event (optional) |
635
|
|
|
* @param: image1 - image for node without children; (optional) |
636
|
|
|
* @param: image2 - image for closed node; (optional) |
637
|
|
|
* @param: image3 - image for opened node (optional) |
638
|
|
|
* @param: optionStr - options string (optional) |
639
|
|
|
* @param: children - node children flag (for dynamical trees) (optional) |
640
|
|
|
* @topic: 2 |
641
|
|
|
*/ |
642
|
|
|
dhtmlXTreeObject.prototype.insertNewItem=function(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children){ |
643
|
|
|
var parentObject=this._globalIdStorageFind(parentId); |
644
|
|
|
if (!parentObject) return (-1); |
645
|
|
|
var nodez=this._attachChildNode(parentObject,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children); |
646
|
|
|
if(!this._idpull[this.rootId].XMLload) |
647
|
|
|
this._idpull[this.rootId].XMLload = 1; |
648
|
|
|
|
649
|
|
|
return nodez; |
650
|
|
|
}; |
651
|
|
|
/** |
652
|
|
|
* @desc: create new node as a child to specified with parentId |
653
|
|
|
* @type: public |
654
|
|
|
* @param: parentId - parent node id |
655
|
|
|
* @param: itemId - new node id |
656
|
|
|
* @param: itemText - new node label |
657
|
|
|
* @param: itemActionHandler - function fired on node select event (optional) |
658
|
|
|
* @param: image1 - image for node without children; (optional) |
659
|
|
|
* @param: image2 - image for closed node; (optional) |
660
|
|
|
* @param: image3 - image for opened node (optional) |
661
|
|
|
* @param: optionStr - options string (optional) |
662
|
|
|
* @param: children - node children flag (for dynamical trees) (optional) |
663
|
|
|
* @topic: 2 |
664
|
|
|
*/ |
665
|
|
|
dhtmlXTreeObject.prototype.insertNewChild=function(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children){ |
666
|
|
|
return this.insertNewItem(parentId,itemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children); |
667
|
|
|
} |
668
|
|
|
/** |
669
|
|
|
* @desc: parse xml |
670
|
|
|
* @type: private |
671
|
|
|
* @param: dhtmlObject - jsTree object |
672
|
|
|
* @param: node - top XML node |
673
|
|
|
* @param: parentId - parent node id |
674
|
|
|
* @param: level - level of tree |
675
|
|
|
* @topic: 2 |
676
|
|
|
*/ |
677
|
|
|
dhtmlXTreeObject.prototype._parseXMLTree=function(a,b,c,d,xml){ |
678
|
|
|
var p=new xmlPointer(xml.getXMLTopNode("tree")); |
679
|
|
|
a._parse(p); |
680
|
|
|
a._p=p; |
681
|
|
|
} |
682
|
|
|
|
683
|
|
|
dhtmlXTreeObject.prototype._parseItem=function(c,temp,preNode,befNode){ |
684
|
|
|
var id; |
685
|
|
|
if (this._srnd && (!this._idpull[id=c.get("id")] || !this._idpull[id].span)) |
686
|
|
|
{ |
687
|
|
|
this._addItemSRND(temp.id,id,c); |
688
|
|
|
return; |
689
|
|
|
} |
690
|
|
|
|
691
|
|
|
var a=c.get_all(); |
692
|
|
|
|
693
|
|
|
if ((typeof(this.waitUpdateXML)=="object")&&(!this.waitUpdateXML[a.id])){ |
694
|
|
|
this._parse(c,a.id,1); |
695
|
|
|
return; |
696
|
|
|
} |
697
|
|
|
|
698
|
|
|
|
699
|
|
|
|
700
|
|
|
|
701
|
|
|
|
702
|
|
|
|
703
|
|
|
var zST=[]; |
704
|
|
|
if (a.select) zST.push("SELECT"); |
705
|
|
|
if (a.top) zST.push("TOP"); |
706
|
|
|
if (a.call) this.nodeAskingCall=a.id; |
707
|
|
|
if (a.checked==-1) zST.push("HCHECKED"); |
708
|
|
|
else if (a.checked) zST.push("CHECKED"); |
709
|
|
|
if (a.open) zST.push("OPEN"); |
710
|
|
|
|
711
|
|
|
if (this.waitUpdateXML){ |
712
|
|
|
if (this._globalIdStorageFind(a.id)) |
713
|
|
|
var newNode=this.updateItem(a.id,a.text,a.im0,a.im1,a.im2,a.checked,a.child); |
714
|
|
|
else{ |
715
|
|
|
if (this.npl==0) zST.push("TOP"); |
716
|
|
|
else preNode=temp.childNodes[this.npl]; |
717
|
|
|
|
718
|
|
|
var newNode=this._attachChildNode(temp,a.id,a.text,0,a.im0,a.im1,a.im2,zST.join(","),a.child,0,preNode); |
719
|
|
|
a.id = newNode.id; |
720
|
|
|
preNode=null; |
721
|
|
|
} |
722
|
|
|
} |
723
|
|
|
else |
724
|
|
|
var newNode=this._attachChildNode(temp,a.id,a.text,0,a.im0,a.im1,a.im2,zST.join(","),a.child,(befNode||0),preNode); |
725
|
|
|
if (a.tooltip) |
726
|
|
|
newNode.span.parentNode.parentNode.title=a.tooltip; |
727
|
|
|
|
728
|
|
|
if (a.style) |
729
|
|
|
if (newNode.span.style.cssText) |
730
|
|
|
newNode.span.style.cssText+=(";"+a.style); |
731
|
|
|
else |
732
|
|
|
newNode.span.setAttribute("style",newNode.span.getAttribute("style")+"; "+a.style); |
733
|
|
|
|
734
|
|
|
if (a.radio) newNode._r_logic=true; |
735
|
|
|
|
736
|
|
|
if (a.nocheckbox){ |
737
|
|
|
var check_node=newNode.span.parentNode.previousSibling.previousSibling; |
738
|
|
|
check_node.style.display="none"; |
739
|
|
|
newNode.nocheckbox=true; |
740
|
|
|
} |
741
|
|
|
if (a.disabled){ |
742
|
|
|
if (a.checked!=null) this._setCheck(newNode,a.checked); |
743
|
|
|
this.disableCheckbox(newNode,1); |
744
|
|
|
} |
745
|
|
|
|
746
|
|
|
|
747
|
|
|
newNode._acc=a.child||0; |
748
|
|
|
|
749
|
|
|
if (this.parserExtension) this.parserExtension._parseExtension.call(this,c,a,(temp?temp.id:0)); |
750
|
|
|
|
751
|
|
|
this.setItemColor(newNode,a.aCol,a.sCol); |
752
|
|
|
if (a.locked=="1") this.lockItem(newNode.id,true,true); |
753
|
|
|
|
754
|
|
|
if ((a.imwidth)||(a.imheight)) this.setIconSize(a.imwidth,a.imheight,newNode); |
755
|
|
|
if ((a.closeable=="0")||(a.closeable=="1")) this.setItemCloseable(newNode,a.closeable); |
756
|
|
|
var zcall=""; |
757
|
|
|
if (a.topoffset) this.setItemTopOffset(newNode,a.topoffset); |
758
|
|
|
if ((!this.slowParse)||(typeof(this.waitUpdateXML)=="object")){ |
759
|
|
|
if (c.sub_exists("item")) |
760
|
|
|
zcall=this._parse(c,a.id,1); |
761
|
|
|
} |
762
|
|
|
|
763
|
|
|
if (zcall!="") this.nodeAskingCall=zcall; |
764
|
|
|
|
765
|
|
|
|
766
|
|
|
c.each("userdata",function(u){ |
767
|
|
|
this.setUserData(c.get("id"),u.get("name"),u.content()); |
768
|
|
|
},this) |
769
|
|
|
|
770
|
|
|
|
771
|
|
|
} |
772
|
|
|
dhtmlXTreeObject.prototype._parse=function(p,parentId,level,start){ |
773
|
|
|
if (this._srnd && !this.parentObject.offsetHeight) { |
774
|
|
|
var self=this; |
775
|
|
|
return window.setTimeout(function(){ |
776
|
|
|
self._parse(p,parentId,level,start); |
777
|
|
|
},100); |
778
|
|
|
} |
779
|
|
|
if (!p.exists()) return; |
|
|
|
|
780
|
|
|
|
781
|
|
|
this.skipLock=true; //disable item locking |
782
|
|
|
//loading flags |
783
|
|
|
|
784
|
|
|
|
785
|
|
|
if (!parentId) { //top level |
786
|
|
|
parentId=p.get("id"); |
787
|
|
|
var skey = p.get("dhx_security"); |
788
|
|
|
if (skey) |
789
|
|
|
dhtmlx.security_key = skey; |
790
|
|
|
|
791
|
|
|
if (p.get("radio")) |
792
|
|
|
this.htmlNode._r_logic=true; |
793
|
|
|
this.parsingOn=parentId; |
794
|
|
|
this.parsedArray=new Array(); |
795
|
|
|
this.setCheckList=""; |
796
|
|
|
this.nodeAskingCall=""; |
797
|
|
|
} |
798
|
|
|
|
799
|
|
|
var temp=this._globalIdStorageFind(parentId); |
800
|
|
|
if (!temp) return dhtmlxError.throwError("DataStructure","XML refers to not existing parent"); |
801
|
|
|
|
802
|
|
|
this.parsCount=this.parsCount?(this.parsCount+1):1; |
803
|
|
|
this.XMLloadingWarning=1; |
804
|
|
|
|
805
|
|
|
if ((temp.childsCount)&&(!start)&&(!this._edsbps)&&(!temp._has_top)) |
806
|
|
|
var preNode=0;//temp.childNodes[temp.childsCount-1]; |
807
|
|
|
else |
808
|
|
|
var preNode=0; |
809
|
|
|
|
810
|
|
|
this.npl=0; |
811
|
|
|
|
812
|
|
|
p.each("item",function(c,i){ |
813
|
|
|
|
814
|
|
|
temp.XMLload=1; |
815
|
|
|
|
816
|
|
|
this._parseItem(c,temp,0,preNode); |
817
|
|
|
|
818
|
|
|
|
819
|
|
|
this.npl++; |
820
|
|
|
|
821
|
|
|
|
822
|
|
|
|
823
|
|
|
},this,start); |
824
|
|
|
|
825
|
|
|
|
826
|
|
|
if (!level) { |
827
|
|
|
p.each("userdata",function(u){ |
828
|
|
|
this.setUserData(p.get("id"),u.get("name"),u.content()); |
829
|
|
|
},this); |
830
|
|
|
|
831
|
|
|
temp.XMLload=1; |
832
|
|
|
if (this.waitUpdateXML){ |
833
|
|
|
this.waitUpdateXML=false; |
834
|
|
|
for (var i=temp.childsCount-1; i>=0; i--) |
835
|
|
|
if (temp.childNodes[i]._dmark) |
836
|
|
|
this.deleteItem(temp.childNodes[i].id); |
837
|
|
|
} |
838
|
|
|
|
839
|
|
|
var parsedNodeTop=this._globalIdStorageFind(this.parsingOn); |
840
|
|
|
|
841
|
|
|
for (var i=0; i<this.parsedArray.length; i++) |
842
|
|
|
temp.htmlNode.childNodes[0].appendChild(this.parsedArray[i]); |
843
|
|
|
this.parsedArray = []; |
844
|
|
|
|
845
|
|
|
this.lastLoadedXMLId=parentId; |
846
|
|
|
this.XMLloadingWarning=0; |
847
|
|
|
|
848
|
|
|
var chArr=this.setCheckList.split(this.dlmtr); |
849
|
|
|
for (var n=0; n<chArr.length; n++) |
850
|
|
|
if (chArr[n]) this.setCheck(chArr[n],1); |
851
|
|
|
|
852
|
|
|
if ((this.XMLsource)&&(this.tscheck)&&(this.smcheck)&&(temp.id!=this.rootId)){ |
853
|
|
|
if (temp.checkstate===0) |
854
|
|
|
this._setSubChecked(0,temp); |
855
|
|
|
else if (temp.checkstate===1) |
856
|
|
|
this._setSubChecked(1,temp); |
857
|
|
|
} |
858
|
|
|
|
859
|
|
|
this._redrawFrom(this,null,start) |
860
|
|
|
if (p.get("order") && p.get("order")!="none") |
861
|
|
|
this._reorderBranch(temp,p.get("order"),true); |
862
|
|
|
|
863
|
|
|
if (this.nodeAskingCall!="") this.callEvent("onClick",[this.nodeAskingCall,this.getSelectedItemId()]); |
864
|
|
|
if (this._branchUpdate) this._branchUpdateNext(p); |
865
|
|
|
} |
866
|
|
|
|
867
|
|
|
|
868
|
|
|
if (this.parsCount==1) { |
869
|
|
|
this.parsingOn=null; |
870
|
|
|
|
871
|
|
|
|
872
|
|
|
|
873
|
|
|
if ((!this._edsbps)||(!this._edsbpsA.length)){ |
874
|
|
|
var that=this; |
875
|
|
|
window.setTimeout( function(){ that.callEvent("onXLE",[that,parentId]); },1); |
876
|
|
|
this.xmlstate=0; |
877
|
|
|
} |
878
|
|
|
this.skipLock=false; |
879
|
|
|
} |
880
|
|
|
this.parsCount--; |
881
|
|
|
|
882
|
|
|
|
883
|
|
|
|
884
|
|
|
|
885
|
|
|
|
886
|
|
|
if (!level && this.onXLE) this.onXLE(this,parentId); |
887
|
|
|
return this.nodeAskingCall; |
888
|
|
|
}; |
889
|
|
|
|
890
|
|
|
|
891
|
|
|
dhtmlXTreeObject.prototype._branchUpdateNext=function(p){ |
892
|
|
|
p.each("item",function(c){ |
893
|
|
|
var nid=c.get("id"); |
894
|
|
|
if (this._idpull[nid] && (!this._idpull[nid].XMLload)) return; |
895
|
|
|
this._branchUpdate++; |
896
|
|
|
this.smartRefreshItem(c.get("id"),c); |
897
|
|
|
},this) |
898
|
|
|
this._branchUpdate--; |
899
|
|
|
} |
900
|
|
|
|
901
|
|
|
dhtmlXTreeObject.prototype.checkUserData=function(node,parentId){ |
902
|
|
|
if ((node.nodeType==1)&&(node.tagName == "userdata")) |
903
|
|
|
{ |
904
|
|
|
var name=node.getAttribute("name"); |
905
|
|
|
if ((name)&&(node.childNodes[0])) |
906
|
|
|
this.setUserData(parentId,name,node.childNodes[0].data); |
907
|
|
|
} |
908
|
|
|
} |
909
|
|
|
|
910
|
|
|
|
911
|
|
|
|
912
|
|
|
|
913
|
|
|
/** |
914
|
|
|
* @desc: reset tree images from selected level |
915
|
|
|
* @type: private |
916
|
|
|
* @param: dhtmlObject - tree |
917
|
|
|
* @param: itemObject - current item |
918
|
|
|
* @topic: 6 |
919
|
|
|
*/ |
920
|
|
|
dhtmlXTreeObject.prototype._redrawFrom=function(dhtmlObject,itemObject,start,visMode){ |
921
|
|
|
if (!itemObject) { |
922
|
|
|
var tempx=dhtmlObject._globalIdStorageFind(dhtmlObject.lastLoadedXMLId); |
923
|
|
|
dhtmlObject.lastLoadedXMLId=-1; |
924
|
|
|
if (!tempx) return 0; |
925
|
|
|
} |
926
|
|
|
else tempx=itemObject; |
927
|
|
|
var acc=0; |
928
|
|
|
for (var i=(start?start-1:0); i<tempx.childsCount; i++) |
929
|
|
|
{ |
930
|
|
|
if ((!this._branchUpdate)||(this._getOpenState(tempx)==1)) |
931
|
|
|
if ((!itemObject)||(visMode==1)) tempx.childNodes[i].htmlNode.parentNode.parentNode.style.display=""; |
932
|
|
|
if (tempx.childNodes[i].openMe==1) |
933
|
|
|
{ |
934
|
|
|
this._openItem(tempx.childNodes[i]); |
935
|
|
|
tempx.childNodes[i].openMe=0; |
936
|
|
|
} |
937
|
|
|
|
938
|
|
|
dhtmlObject._redrawFrom(dhtmlObject,tempx.childNodes[i]); |
939
|
|
|
|
940
|
|
|
|
941
|
|
|
}; |
942
|
|
|
|
943
|
|
|
if ((!tempx.unParsed)&&((tempx.XMLload)||(!this.XMLsource))) |
944
|
|
|
tempx._acc=acc; |
945
|
|
|
dhtmlObject._correctLine(tempx); |
946
|
|
|
dhtmlObject._correctPlus(tempx); |
947
|
|
|
|
948
|
|
|
}; |
949
|
|
|
|
950
|
|
|
/** |
951
|
|
|
* @desc: create and return main html element of tree |
952
|
|
|
* @type: private |
953
|
|
|
* @topic: 0 |
954
|
|
|
*/ |
955
|
|
|
dhtmlXTreeObject.prototype._createSelf=function(){ |
956
|
|
|
var div=document.createElement('div'); |
957
|
|
|
div.className="containerTableStyle"; |
958
|
|
|
div.style.width=this.width; |
959
|
|
|
div.style.height=this.height; |
960
|
|
|
this.parentObject.appendChild(div); |
961
|
|
|
return div; |
962
|
|
|
}; |
963
|
|
|
|
964
|
|
|
/** |
965
|
|
|
* @desc: collapse target node |
966
|
|
|
* @type: private |
967
|
|
|
* @param: itemObject - item object |
968
|
|
|
* @topic: 4 |
969
|
|
|
*/ |
970
|
|
|
dhtmlXTreeObject.prototype._xcloseAll=function(itemObject) |
971
|
|
|
{ |
972
|
|
|
if (itemObject.unParsed) return; |
973
|
|
|
if (this.rootId!=itemObject.id) { |
974
|
|
|
if (!itemObject.htmlNode) return;//srnd |
975
|
|
|
var Nodes=itemObject.htmlNode.childNodes[0].childNodes; |
976
|
|
|
var Count=Nodes.length; |
977
|
|
|
|
978
|
|
|
for (var i=1; i<Count; i++) |
979
|
|
|
Nodes[i].style.display="none"; |
980
|
|
|
|
981
|
|
|
this._correctPlus(itemObject); |
982
|
|
|
} |
983
|
|
|
|
984
|
|
|
for (var i=0; i<itemObject.childsCount; i++) |
985
|
|
|
if (itemObject.childNodes[i].childsCount) |
986
|
|
|
this._xcloseAll(itemObject.childNodes[i]); |
987
|
|
|
}; |
988
|
|
|
/** |
989
|
|
|
* @desc: expand target node |
990
|
|
|
* @type: private |
991
|
|
|
* @param: itemObject - item object |
992
|
|
|
* @topic: 4 |
993
|
|
|
*/ |
994
|
|
|
dhtmlXTreeObject.prototype._xopenAll=function(itemObject) |
995
|
|
|
{ |
996
|
|
|
this._HideShow(itemObject,2); |
997
|
|
|
for (var i=0; i<itemObject.childsCount; i++) |
998
|
|
|
this._xopenAll(itemObject.childNodes[i]); |
999
|
|
|
}; |
1000
|
|
|
/** |
1001
|
|
|
* @desc: set correct tree-line and node images |
1002
|
|
|
* @type: private |
1003
|
|
|
* @param: itemObject - item object |
1004
|
|
|
* @topic: 6 |
1005
|
|
|
*/ |
1006
|
|
|
dhtmlXTreeObject.prototype._correctPlus=function(itemObject){ |
1007
|
|
|
if (!itemObject.htmlNode) return; |
|
|
|
|
1008
|
|
|
var imsrc=itemObject.htmlNode.childNodes[0].childNodes[0].childNodes[0].lastChild; |
1009
|
|
|
var imsrc2=itemObject.htmlNode.childNodes[0].childNodes[0].childNodes[2].childNodes[0]; |
1010
|
|
|
|
1011
|
|
|
var workArray=this.lineArray; |
1012
|
|
|
if ((this.XMLsource)&&(!itemObject.XMLload)) |
1013
|
|
|
{ |
1014
|
|
|
var workArray=this.plusArray; |
1015
|
|
|
this._setSrc(imsrc2,this.iconURL+itemObject.images[2]); |
1016
|
|
|
if (this._txtimg) return (imsrc.innerHTML="[+]"); |
1017
|
|
|
} |
1018
|
|
|
else |
1019
|
|
|
if ((itemObject.childsCount)||(itemObject.unParsed)) |
1020
|
|
|
{ |
1021
|
|
|
if ((itemObject.htmlNode.childNodes[0].childNodes[1])&&( itemObject.htmlNode.childNodes[0].childNodes[1].style.display!="none" )) |
1022
|
|
|
{ |
1023
|
|
|
if (!itemObject.wsign) var workArray=this.minusArray; |
1024
|
|
|
this._setSrc(imsrc2,this.iconURL+itemObject.images[1]); |
1025
|
|
|
if (this._txtimg) return (imsrc.innerHTML="[-]"); |
1026
|
|
|
} |
1027
|
|
|
else |
1028
|
|
|
{ |
1029
|
|
|
if (!itemObject.wsign) var workArray=this.plusArray; |
1030
|
|
|
this._setSrc(imsrc2,this.iconURL+itemObject.images[2]); |
1031
|
|
|
if (this._txtimg) return (imsrc.innerHTML="[+]"); |
1032
|
|
|
} |
1033
|
|
|
} |
1034
|
|
|
else |
1035
|
|
|
{ |
1036
|
|
|
this._setSrc(imsrc2,this.iconURL+itemObject.images[0]); |
1037
|
|
|
} |
1038
|
|
|
|
1039
|
|
|
|
1040
|
|
|
var tempNum=2; |
1041
|
|
|
if (!itemObject.treeNod.treeLinesOn) this._setSrc(imsrc,this.imPath+workArray[3]); |
1042
|
|
|
else { |
1043
|
|
|
if (itemObject.parentObject) tempNum=this._getCountStatus(itemObject.id,itemObject.parentObject); |
1044
|
|
|
this._setSrc(imsrc,this.imPath+workArray[tempNum]); |
1045
|
|
|
} |
1046
|
|
|
}; |
1047
|
|
|
|
1048
|
|
|
/** |
1049
|
|
|
* @desc: set correct tree-line images |
1050
|
|
|
* @type: private |
1051
|
|
|
* @param: itemObject - item object |
1052
|
|
|
* @topic: 6 |
1053
|
|
|
*/ |
1054
|
|
|
dhtmlXTreeObject.prototype._correctLine=function(itemObject){ |
1055
|
|
|
if (!itemObject.htmlNode) return; |
1056
|
|
|
var sNode=itemObject.parentObject; |
1057
|
|
|
if (sNode) |
1058
|
|
|
if ((this._getLineStatus(itemObject.id,sNode)==0)||(!this.treeLinesOn)) |
1059
|
|
|
for(var i=1; i<=itemObject.childsCount; i++){ |
1060
|
|
|
if (!itemObject.htmlNode.childNodes[0].childNodes[i]) break; |
1061
|
|
|
itemObject.htmlNode.childNodes[0].childNodes[i].childNodes[0].style.backgroundImage=""; |
1062
|
|
|
itemObject.htmlNode.childNodes[0].childNodes[i].childNodes[0].style.backgroundRepeat=""; |
1063
|
|
|
} |
1064
|
|
|
else |
1065
|
|
|
for(var i=1; i<=itemObject.childsCount; i++){ |
1066
|
|
|
if (!itemObject.htmlNode.childNodes[0].childNodes[i]) break; |
1067
|
|
|
itemObject.htmlNode.childNodes[0].childNodes[i].childNodes[0].style.backgroundImage="url("+this.imPath+this.lineArray[5]+")"; |
1068
|
|
|
itemObject.htmlNode.childNodes[0].childNodes[i].childNodes[0].style.backgroundRepeat="repeat-y"; |
1069
|
|
|
} |
1070
|
|
|
}; |
1071
|
|
|
/** |
1072
|
|
|
* @desc: return type of node |
1073
|
|
|
* @type: private |
1074
|
|
|
* @param: itemId - item id |
1075
|
|
|
* @param: itemObject - parent node object |
1076
|
|
|
* @topic: 6 |
1077
|
|
|
*/ |
1078
|
|
|
dhtmlXTreeObject.prototype._getCountStatus=function(itemId,itemObject){ |
1079
|
|
|
if (itemObject.childsCount<=1) { if (itemObject.id==this.rootId) return 4; else return 0; } |
|
|
|
|
1080
|
|
|
|
1081
|
|
|
if (itemObject.childNodes[0].id==itemId) if (itemObject.id==this.rootId) return 2; else return 1; |
|
|
|
|
1082
|
|
|
if (itemObject.childNodes[itemObject.childsCount-1].id==itemId) return 0; |
1083
|
|
|
|
1084
|
|
|
return 1; |
1085
|
|
|
}; |
1086
|
|
|
/** |
1087
|
|
|
* @desc: return type of node |
1088
|
|
|
* @type: private |
1089
|
|
|
* @param: itemId - node id |
1090
|
|
|
* @param: itemObject - parent node object |
1091
|
|
|
* @topic: 6 |
1092
|
|
|
*/ |
1093
|
|
|
dhtmlXTreeObject.prototype._getLineStatus =function(itemId,itemObject){ |
1094
|
|
|
if (itemObject.childNodes[itemObject.childsCount-1].id==itemId) return 0; |
1095
|
|
|
return 1; |
1096
|
|
|
} |
1097
|
|
|
|
1098
|
|
|
/** |
1099
|
|
|
* @desc: open/close node |
1100
|
|
|
* @type: private |
1101
|
|
|
* @param: itemObject - node object |
1102
|
|
|
* @param: mode - open/close mode [1-close 2-open](optional) |
1103
|
|
|
* @topic: 6 |
1104
|
|
|
*/ |
1105
|
|
|
dhtmlXTreeObject.prototype._HideShow=function(itemObject,mode){ |
1106
|
|
|
if ((this.XMLsource)&&(!itemObject.XMLload)) { |
1107
|
|
|
if (mode==1) return; //close for not loaded node - ignore it |
1108
|
|
|
itemObject.XMLload=1; |
1109
|
|
|
this._loadDynXML(itemObject.id); |
1110
|
|
|
return; }; |
1111
|
|
|
|
1112
|
|
|
var Nodes=itemObject.htmlNode.childNodes[0].childNodes; var Count=Nodes.length; |
1113
|
|
|
if (Count>1){ |
1114
|
|
|
if ( ( (Nodes[1].style.display!="none") || (mode==1) ) && (mode!=2) ) { |
1115
|
|
|
//nb:solves standard doctype prb in IE |
1116
|
|
|
this.allTree.childNodes[0].border = "1"; |
1117
|
|
|
this.allTree.childNodes[0].border = "0"; |
1118
|
|
|
nodestyle="none"; |
1119
|
|
|
} |
1120
|
|
|
else nodestyle=""; |
1121
|
|
|
|
1122
|
|
|
for (var i=1; i<Count; i++) |
1123
|
|
|
Nodes[i].style.display=nodestyle; |
1124
|
|
|
} |
1125
|
|
|
this._correctPlus(itemObject); |
1126
|
|
|
} |
1127
|
|
|
|
1128
|
|
|
/** |
1129
|
|
|
* @desc: return node state |
1130
|
|
|
* @type: private |
1131
|
|
|
* @param: itemObject - node object |
1132
|
|
|
* @topic: 6 |
1133
|
|
|
*/ |
1134
|
|
|
dhtmlXTreeObject.prototype._getOpenState=function(itemObject){ |
1135
|
|
|
if (!itemObject.htmlNode) return 0; //srnd |
1136
|
|
|
var z=itemObject.htmlNode.childNodes[0].childNodes; |
1137
|
|
|
if (z.length<=1) return 0; |
1138
|
|
|
if (z[1].style.display!="none") return 1; |
1139
|
|
|
else return -1; |
|
|
|
|
1140
|
|
|
} |
1141
|
|
|
|
1142
|
|
|
|
1143
|
|
|
|
1144
|
|
|
/** |
1145
|
|
|
* @desc: ondblclick item event handler |
1146
|
|
|
* @type: private |
1147
|
|
|
* @topic: 0 |
1148
|
|
|
*/ |
1149
|
|
|
dhtmlXTreeObject.prototype.onRowClick2=function(){ |
1150
|
|
|
var that=this.parentObject.treeNod; |
1151
|
|
|
if (!that.callEvent("onDblClick",[this.parentObject.id,that])) return false; |
1152
|
|
|
if ((this.parentObject.closeble)&&(this.parentObject.closeble!="0")) |
1153
|
|
|
that._HideShow(this.parentObject); |
1154
|
|
|
else |
1155
|
|
|
that._HideShow(this.parentObject,2); |
1156
|
|
|
|
1157
|
|
|
if (that.checkEvent("onOpenEnd")) |
1158
|
|
|
if (!that.xmlstate) |
1159
|
|
|
that.callEvent("onOpenEnd",[this.parentObject.id,that._getOpenState(this.parentObject)]); |
1160
|
|
|
else{ |
1161
|
|
|
that._oie_onXLE.push(that.onXLE); |
1162
|
|
|
that.onXLE=that._epnFHe; |
1163
|
|
|
} |
1164
|
|
|
return false; |
1165
|
|
|
}; |
1166
|
|
|
/** |
1167
|
|
|
* @desc: onclick item event handler |
1168
|
|
|
* @type: private |
1169
|
|
|
* @topic: 0 |
1170
|
|
|
*/ |
1171
|
|
|
dhtmlXTreeObject.prototype.onRowClick=function(){ |
1172
|
|
|
var that=this.parentObject.treeNod; |
1173
|
|
|
if (!that.callEvent("onOpenStart",[this.parentObject.id,that._getOpenState(this.parentObject)])) return 0; |
1174
|
|
|
if ((this.parentObject.closeble)&&(this.parentObject.closeble!="0")) |
1175
|
|
|
that._HideShow(this.parentObject); |
1176
|
|
|
else |
1177
|
|
|
that._HideShow(this.parentObject,2); |
1178
|
|
|
|
1179
|
|
|
|
1180
|
|
|
if (that.checkEvent("onOpenEnd")) |
1181
|
|
|
if (!that.xmlstate) |
1182
|
|
|
that.callEvent("onOpenEnd",[this.parentObject.id,that._getOpenState(this.parentObject)]); |
1183
|
|
|
else{ |
1184
|
|
|
that._oie_onXLE.push(that.onXLE); |
1185
|
|
|
that.onXLE=that._epnFHe; |
1186
|
|
|
} |
1187
|
|
|
|
1188
|
|
|
}; |
1189
|
|
|
|
1190
|
|
|
dhtmlXTreeObject.prototype._epnFHe=function(that,id,flag){ |
1191
|
|
|
if (id!=this.rootId) |
1192
|
|
|
this.callEvent("onOpenEnd",[id,that.getOpenState(id)]); |
1193
|
|
|
that.onXLE=that._oie_onXLE.pop(); |
1194
|
|
|
|
1195
|
|
|
if (!flag && !that._oie_onXLE.length) |
1196
|
|
|
if (that.onXLE) that.onXLE(that,id); |
1197
|
|
|
} |
1198
|
|
|
|
1199
|
|
|
|
1200
|
|
|
|
1201
|
|
|
/** |
1202
|
|
|
* @desc: onclick item image event handler |
1203
|
|
|
* @type: private |
1204
|
|
|
* @edition: Professional |
1205
|
|
|
* @topic: 0 |
1206
|
|
|
*/ |
1207
|
|
|
dhtmlXTreeObject.prototype.onRowClickDown=function(e){ |
1208
|
|
|
e=e||window.event; |
1209
|
|
|
var that=this.parentObject.treeNod; |
1210
|
|
|
that._selectItem(this.parentObject,e); |
1211
|
|
|
}; |
1212
|
|
|
|
1213
|
|
|
|
1214
|
|
|
/***** |
1215
|
|
|
SELECTION |
1216
|
|
|
*****/ |
1217
|
|
|
|
1218
|
|
|
/** |
1219
|
|
|
* @desc: retun selected item id |
1220
|
|
|
* @type: public |
1221
|
|
|
* @return: id of selected item |
1222
|
|
|
* @topic: 1 |
1223
|
|
|
*/ |
1224
|
|
|
dhtmlXTreeObject.prototype.getSelectedItemId=function() |
1225
|
|
|
{ |
1226
|
|
|
var str=new Array(); |
1227
|
|
|
for (var i=0; i<this._selected.length; i++) str[i]=this._selected[i].id; |
1228
|
|
|
return (str.join(this.dlmtr)); |
1229
|
|
|
}; |
1230
|
|
|
|
1231
|
|
|
/** |
1232
|
|
|
* @desc: visual select item in tree |
1233
|
|
|
* @type: private |
1234
|
|
|
* @param: node - tree item object |
1235
|
|
|
* @param: mode - true suppress onSelect |
1236
|
|
|
* @edition: Professional |
1237
|
|
|
* @topic: 0 |
1238
|
|
|
*/ |
1239
|
|
|
dhtmlXTreeObject.prototype._selectItem=function(node,e,mode){ |
1240
|
|
|
if (typeof mode == 'undefined') mode=false; |
1241
|
|
|
if (!mode && this.checkEvent("onSelect")) this._onSSCFold=this.getSelectedItemId(); |
1242
|
|
|
|
1243
|
|
|
if ((!this._amsel) || (!e) || ((!e.ctrlKey) && (!e.metaKey) && (!e.shiftKey))) { |
1244
|
|
|
this._unselectItems() |
1245
|
|
|
} |
1246
|
|
|
if ((node.i_sel) && (this._amsel) && (e) && (e.ctrlKey || e.metaKey)) { |
1247
|
|
|
this._unselectItem(node) |
1248
|
|
|
} else { |
1249
|
|
|
if ((!node.i_sel) && ((!this._amselS) || (this._selected.length == 0) || (this._selected[0].parentObject == node.parentObject))) { |
1250
|
|
|
if ((this._amsel) && (e) && (e.shiftKey) && (this._selected.length != 0) && (this._selected[this._selected.length - 1].parentObject == node.parentObject)) { |
1251
|
|
|
var f = this._getIndex(this._selected[this._selected.length - 1]); |
1252
|
|
|
var d = this._getIndex(node); |
1253
|
|
|
if (d < f) { |
1254
|
|
|
var l = f; |
1255
|
|
|
f = d; |
1256
|
|
|
d = l |
1257
|
|
|
} |
1258
|
|
|
for (var g = f; g <= d; g++) { |
1259
|
|
|
if (!node.parentObject.childNodes[g].i_sel) { |
1260
|
|
|
this._markItem(node.parentObject.childNodes[g]) |
1261
|
|
|
} |
1262
|
|
|
} |
1263
|
|
|
} else { |
1264
|
|
|
this._markItem(node) |
1265
|
|
|
} |
1266
|
|
|
} |
1267
|
|
|
} |
1268
|
|
|
if (!mode && this.checkEvent("onSelect")) { |
1269
|
|
|
var z=this.getSelectedItemId(); |
1270
|
|
|
if (z!=this._onSSCFold) |
1271
|
|
|
this.callEvent("onSelect",[z]); |
1272
|
|
|
} |
1273
|
|
|
} |
1274
|
|
|
dhtmlXTreeObject.prototype._markItem=function(node){ |
1275
|
|
|
if (node.scolor) node.span.style.color=node.scolor; |
1276
|
|
|
node.span.className="selectedTreeRow"; |
1277
|
|
|
node.i_sel=true; |
1278
|
|
|
this._selected[this._selected.length]=node; |
1279
|
|
|
} |
1280
|
|
|
|
1281
|
|
|
/** |
1282
|
|
|
* @desc: retun node index in children collection by Id |
1283
|
|
|
* @type: public |
1284
|
|
|
* @param: itemId - node id |
1285
|
|
|
* @return: node index |
1286
|
|
|
* @topic: 2 |
1287
|
|
|
*/ |
1288
|
|
|
dhtmlXTreeObject.prototype.getIndexById=function(itemId){ |
1289
|
|
|
var z=this._globalIdStorageFind(itemId); |
1290
|
|
|
if (!z) return null; |
1291
|
|
|
return this._getIndex(z); |
1292
|
|
|
}; |
1293
|
|
|
dhtmlXTreeObject.prototype._getIndex=function(w){ |
1294
|
|
|
var z=w.parentObject; |
1295
|
|
|
for (var i=0; i<z.childsCount; i++) |
1296
|
|
|
if (z.childNodes[i]==w) return i; |
1297
|
|
|
}; |
1298
|
|
|
|
1299
|
|
|
|
1300
|
|
|
|
1301
|
|
|
|
1302
|
|
|
|
1303
|
|
|
/** |
1304
|
|
|
* @desc: visual unselect item in tree |
1305
|
|
|
* @type: private |
1306
|
|
|
* @param: node - tree item object |
1307
|
|
|
* @edition: Professional |
1308
|
|
|
* @topic: 0 |
1309
|
|
|
*/ |
1310
|
|
|
dhtmlXTreeObject.prototype._unselectItem=function(node){ |
1311
|
|
|
if ((node)&&(node.i_sel)) |
1312
|
|
|
{ |
1313
|
|
|
|
1314
|
|
|
node.span.className="standartTreeRow"; |
1315
|
|
|
if (node.acolor) node.span.style.color=node.acolor; |
1316
|
|
|
node.i_sel=false; |
1317
|
|
|
for (var i=0; i<this._selected.length; i++) |
1318
|
|
|
if (!this._selected[i].i_sel) { |
1319
|
|
|
this._selected.splice(i,1); |
1320
|
|
|
break; |
1321
|
|
|
} |
1322
|
|
|
} |
1323
|
|
|
} |
1324
|
|
|
|
1325
|
|
|
/** |
1326
|
|
|
* @desc: visual unselect items in tree |
1327
|
|
|
* @type: private |
1328
|
|
|
* @param: node - tree item object |
1329
|
|
|
* @edition: Professional |
1330
|
|
|
* @topic: 0 |
1331
|
|
|
*/ |
1332
|
|
|
dhtmlXTreeObject.prototype._unselectItems=function(){ |
1333
|
|
|
for (var i=0; i<this._selected.length; i++){ |
1334
|
|
|
var node=this._selected[i]; |
1335
|
|
|
node.span.className="standartTreeRow"; |
1336
|
|
|
if (node.acolor) node.span.style.color=node.acolor; |
1337
|
|
|
node.i_sel=false; |
1338
|
|
|
} |
1339
|
|
|
this._selected=new Array(); |
1340
|
|
|
} |
1341
|
|
|
|
1342
|
|
|
|
1343
|
|
|
/** |
1344
|
|
|
* @desc: select node text event handler |
1345
|
|
|
* @type: private |
1346
|
|
|
* @param: e - event object |
1347
|
|
|
* @param: htmlObject - node object |
1348
|
|
|
* @param: mode - if false - call onSelect event |
1349
|
|
|
* @topic: 0 |
1350
|
|
|
*/ |
1351
|
|
|
dhtmlXTreeObject.prototype.onRowSelect=function(e,htmlObject,mode){ |
1352
|
|
|
e=e||window.event; |
1353
|
|
|
|
1354
|
|
|
var obj=this.parentObject; |
1355
|
|
|
if (htmlObject) obj=htmlObject.parentObject; |
1356
|
|
|
var that=obj.treeNod; |
1357
|
|
|
|
1358
|
|
|
var lastId=that.getSelectedItemId(); |
1359
|
|
|
if ((!e)||(!e.skipUnSel)) |
1360
|
|
|
that._selectItem(obj,e,mode); |
1361
|
|
|
|
1362
|
|
|
if (!mode) { |
1363
|
|
|
if (obj.actionHandler) obj.actionHandler(obj.id,lastId); |
1364
|
|
|
else that.callEvent("onClick",[obj.id,lastId]); |
1365
|
|
|
} |
1366
|
|
|
}; |
1367
|
|
|
|
1368
|
|
|
|
1369
|
|
|
|
1370
|
|
|
|
1371
|
|
|
|
1372
|
|
|
/** |
1373
|
|
|
* @desc: fix checkbox state |
1374
|
|
|
* @type: private |
1375
|
|
|
* @topic: 0 |
1376
|
|
|
*/ |
1377
|
|
|
dhtmlXTreeObject.prototype._correctCheckStates=function(dhtmlObject){ |
1378
|
|
|
|
1379
|
|
|
if (!this.tscheck) return; |
1380
|
|
|
if (!dhtmlObject) return; |
1381
|
|
|
if (dhtmlObject.id==this.rootId) return; |
1382
|
|
|
//calculate state |
1383
|
|
|
var act=dhtmlObject.childNodes; |
1384
|
|
|
var flag1=0; var flag2=0; |
1385
|
|
|
if (dhtmlObject.childsCount==0) return; |
1386
|
|
|
for (var i=0; i<dhtmlObject.childsCount; i++){ |
1387
|
|
|
if (act[i].dscheck) continue; |
1388
|
|
|
if (act[i].checkstate==0) flag1=1; |
1389
|
|
|
else if (act[i].checkstate==1) flag2=1; |
1390
|
|
|
else { flag1=1; flag2=1; break; } |
1391
|
|
|
} |
1392
|
|
|
|
1393
|
|
|
if ((flag1)&&(flag2)) this._setCheck(dhtmlObject,"unsure"); |
1394
|
|
|
else if (flag1) this._setCheck(dhtmlObject,false); |
1395
|
|
|
else this._setCheck(dhtmlObject,true); |
1396
|
|
|
|
1397
|
|
|
this._correctCheckStates(dhtmlObject.parentObject); |
1398
|
|
|
} |
1399
|
|
|
|
1400
|
|
|
/** |
1401
|
|
|
* @desc: checbox select action |
1402
|
|
|
* @type: private |
1403
|
|
|
* @topic: 0 |
1404
|
|
|
*/ |
1405
|
|
|
dhtmlXTreeObject.prototype.onCheckBoxClick=function(e){ |
1406
|
|
|
if (!this.treeNod.callEvent("onBeforeCheck",[this.parentObject.id,this.parentObject.checkstate])) |
1407
|
|
|
return; |
|
|
|
|
1408
|
|
|
|
1409
|
|
|
if (this.parentObject.dscheck) return true; |
1410
|
|
|
if (this.treeNod.tscheck) |
1411
|
|
|
if (this.parentObject.checkstate==1) this.treeNod._setSubChecked(false,this.parentObject); |
1412
|
|
|
else this.treeNod._setSubChecked(true,this.parentObject); |
1413
|
|
|
else |
1414
|
|
|
if (this.parentObject.checkstate==1) this.treeNod._setCheck(this.parentObject,false); |
1415
|
|
|
else this.treeNod._setCheck(this.parentObject,true); |
1416
|
|
|
this.treeNod._correctCheckStates(this.parentObject.parentObject); |
1417
|
|
|
|
1418
|
|
|
return this.treeNod.callEvent("onCheck",[this.parentObject.id,this.parentObject.checkstate]); |
1419
|
|
|
}; |
1420
|
|
|
/** |
1421
|
|
|
* @desc: create HTML elements for tree node |
1422
|
|
|
* @type: private |
1423
|
|
|
* @param: acheck - enable/disable checkbox |
1424
|
|
|
* @param: itemObject - item object |
1425
|
|
|
* @param: mode - mode |
1426
|
|
|
* @topic: 0 |
1427
|
|
|
*/ |
1428
|
|
View Code Duplication |
dhtmlXTreeObject.prototype._createItem=function(acheck,itemObject,mode){ |
1429
|
|
|
|
1430
|
|
|
var table=document.createElement('table'); |
1431
|
|
|
table.cellSpacing=0;table.cellPadding=0; |
1432
|
|
|
table.border=0; |
1433
|
|
|
|
1434
|
|
|
if(this.hfMode)table.style.tableLayout="fixed"; |
1435
|
|
|
table.style.margin=0;table.style.padding=0; |
1436
|
|
|
|
1437
|
|
|
var tbody=document.createElement('tbody'); |
1438
|
|
|
var tr=document.createElement('tr'); |
1439
|
|
|
|
1440
|
|
|
var td1=document.createElement('td'); |
1441
|
|
|
td1.className="standartTreeImage"; |
1442
|
|
|
|
1443
|
|
|
if(this._txtimg){ |
1444
|
|
|
var img0=document.createElement("div"); |
1445
|
|
|
td1.appendChild(img0); |
1446
|
|
|
img0.className="dhx_tree_textSign"; |
1447
|
|
|
} |
1448
|
|
|
else |
1449
|
|
|
{ |
1450
|
|
|
var img0=this._getImg(itemObject.id); |
1451
|
|
|
img0.border="0"; |
1452
|
|
|
if (img0.tagName=="IMG") img0.align="absmiddle"; |
1453
|
|
|
td1.appendChild(img0); img0.style.padding=0; img0.style.margin=0; |
1454
|
|
|
img0.style.width=this.def_line_img_x; img0.style.height=this.def_line_img_y; |
1455
|
|
|
} |
1456
|
|
|
|
1457
|
|
|
var td11=document.createElement('td'); |
1458
|
|
|
// var inp=document.createElement("input"); inp.type="checkbox"; inp.style.width="12px"; inp.style.height="12px"; |
1459
|
|
|
var inp=this._getImg(this.cBROf?this.rootId:itemObject.id); |
1460
|
|
|
inp.checked=0; this._setSrc(inp,this.imPath+this.checkArray[0]); inp.style.width="16px"; inp.style.height="16px"; |
1461
|
|
|
//can cause problems with hide/show check |
1462
|
|
|
|
1463
|
|
|
if (!acheck) td11.style.display="none"; |
1464
|
|
|
|
1465
|
|
|
// td11.className="standartTreeImage"; |
1466
|
|
|
//if (acheck) |
1467
|
|
|
td11.appendChild(inp); |
1468
|
|
|
if ((!this.cBROf)&&(inp.tagName=="IMG")) inp.align="absmiddle"; |
1469
|
|
|
inp.onclick=this.onCheckBoxClick; |
1470
|
|
|
inp.treeNod=this; |
1471
|
|
|
inp.parentObject=itemObject; |
1472
|
|
|
if (!window._KHTMLrv) td11.width="20px"; |
1473
|
|
|
else td11.width="16px"; |
1474
|
|
|
|
1475
|
|
|
var td12=document.createElement('td'); |
1476
|
|
|
td12.className="standartTreeImage"; |
1477
|
|
|
var img=this._getImg(this.timgen?itemObject.id:this.rootId); |
1478
|
|
|
img.onmousedown=this._preventNsDrag; img.ondragstart=this._preventNsDrag; |
1479
|
|
|
img.border="0"; |
1480
|
|
|
if (this._aimgs){ |
1481
|
|
|
img.parentObject=itemObject; |
1482
|
|
|
if (img.tagName=="IMG") img.align="absmiddle"; |
1483
|
|
|
img.onclick=this.onRowSelect; } |
1484
|
|
|
if (!mode) this._setSrc(img,this.iconURL+this.imageArray[0]); |
1485
|
|
|
td12.appendChild(img); img.style.padding=0; img.style.margin=0; |
1486
|
|
|
if (this.timgen) |
1487
|
|
|
{ |
1488
|
|
|
td12.style.width=img.style.width=this.def_img_x; img.style.height=this.def_img_y; } |
1489
|
|
|
else |
1490
|
|
|
{ |
1491
|
|
|
img.style.width="0px"; img.style.height="0px"; |
1492
|
|
|
if (_isOpera || window._KHTMLrv ) td12.style.display="none"; |
1493
|
|
|
} |
1494
|
|
|
|
1495
|
|
|
|
1496
|
|
|
var td2=document.createElement('td'); |
1497
|
|
|
td2.className="standartTreeRow"; |
1498
|
|
|
|
1499
|
|
|
itemObject.span=document.createElement('span'); |
1500
|
|
|
itemObject.span.className="standartTreeRow"; |
1501
|
|
|
if (this.mlitems) { |
1502
|
|
|
itemObject.span.style.width=this.mlitems; |
1503
|
|
|
// if (!_isIE) |
1504
|
|
|
itemObject.span.style.display="block"; |
1505
|
|
|
} |
1506
|
|
|
else td2.noWrap=true; |
1507
|
|
|
if (_isIE && _isIE>7) td2.style.width="999999px"; |
1508
|
|
|
else if (!window._KHTMLrv) td2.style.width="100%"; |
1509
|
|
|
|
1510
|
|
|
// itemObject.span.appendChild(document.createTextNode(itemObject.label)); |
1511
|
|
|
itemObject.span.innerHTML=itemObject.label; |
1512
|
|
|
td2.appendChild(itemObject.span); |
1513
|
|
|
td2.parentObject=itemObject; td1.parentObject=itemObject; |
1514
|
|
|
td2.onclick=this.onRowSelect; td1.onclick=this.onRowClick; td2.ondblclick=this.onRowClick2; |
1515
|
|
|
if (this.ettip) |
1516
|
|
|
tr.title=itemObject.label; |
1517
|
|
|
|
1518
|
|
|
if (this.dragAndDropOff) { |
1519
|
|
|
if (this._aimgs) { this.dragger.addDraggableItem(td12,this); td12.parentObject=itemObject; } |
1520
|
|
|
this.dragger.addDraggableItem(td2,this); |
1521
|
|
|
} |
1522
|
|
|
|
1523
|
|
|
itemObject.span.style.paddingLeft="5px"; itemObject.span.style.paddingRight="5px"; td2.style.verticalAlign=""; |
1524
|
|
|
td2.style.fontSize="10pt"; td2.style.cursor=this.style_pointer; |
1525
|
|
|
tr.appendChild(td1); tr.appendChild(td11); tr.appendChild(td12); |
1526
|
|
|
tr.appendChild(td2); |
1527
|
|
|
tbody.appendChild(tr); |
1528
|
|
|
table.appendChild(tbody); |
1529
|
|
|
|
1530
|
|
|
if (this.ehlt || this.checkEvent("onMouseIn") || this.checkEvent("onMouseOut")){//highlighting |
1531
|
|
|
tr.onmousemove=this._itemMouseIn; |
1532
|
|
|
tr[(_isIE)?"onmouseleave":"onmouseout"]=this._itemMouseOut; |
1533
|
|
|
} |
1534
|
|
|
return table; |
1535
|
|
|
}; |
1536
|
|
|
|
1537
|
|
|
|
1538
|
|
|
/** |
1539
|
|
|
* @desc: set path to images directory |
1540
|
|
|
* @param: newPath - path to images directory (related to the page with tree or absolute http url) |
1541
|
|
|
* @type: public |
1542
|
|
|
* @topic: 0 |
1543
|
|
|
*/ |
1544
|
|
|
dhtmlXTreeObject.prototype.setImagePath=function( newPath ){ this.imPath=newPath; this.iconURL=newPath; }; |
1545
|
|
|
/** |
1546
|
|
|
* @desc: set path to external images used as tree icons |
1547
|
|
|
* @type: public |
1548
|
|
|
* @param: path - url (or relative path) of images folder with closing "/" |
1549
|
|
|
* @topic: 0,7 |
1550
|
|
|
*/ |
1551
|
|
|
dhtmlXTreeObject.prototype.setIconPath=function(path){ |
1552
|
|
|
this.iconURL=path; |
1553
|
|
|
} |
1554
|
|
|
|
1555
|
|
|
|
1556
|
|
|
|
1557
|
|
|
/** |
1558
|
|
|
* @desc: set function called when tree node selected |
1559
|
|
|
* @param: (function) func - event handling function |
1560
|
|
|
* @type: deprecated |
1561
|
|
|
* @topic: 0,7 |
1562
|
|
|
* @event: onRightClick |
1563
|
|
|
* @depricated: use grid.attachEvent("onRightClick",func); instead |
1564
|
|
|
* @eventdesc: Event occurs after right mouse button was clicked. |
1565
|
|
|
Assigning this handler can disable default context menu, and incompattible with dhtmlXMenu integration. |
1566
|
|
|
* @eventparam: (string) ID of clicked item |
1567
|
|
|
* @eventparam: (object) event object |
1568
|
|
|
*/ |
1569
|
|
|
dhtmlXTreeObject.prototype.setOnRightClickHandler=function(func){ this.attachEvent("onRightClick",func); }; |
1570
|
|
|
|
1571
|
|
|
/** |
1572
|
|
|
* @desc: set function called when tree node clicked, also can be forced to call from API |
1573
|
|
|
* @param: func - event handling function |
1574
|
|
|
* @type: deprecated |
1575
|
|
|
* @topic: 0,7 |
1576
|
|
|
* @event: onClick |
1577
|
|
|
* @depricated: use grid.attachEvent("onClick",func); instead |
1578
|
|
|
* @eventdesc: Event raises immideatly after text part of item in tree was clicked, but after default onClick functionality was processed. |
1579
|
|
|
Richt mouse button click can be catched by onRightClick event handler. |
1580
|
|
|
* @eventparam: ID of clicked item |
1581
|
|
|
* @eventparam: ID of previously selected item |
1582
|
|
|
*/ |
1583
|
|
|
dhtmlXTreeObject.prototype.setOnClickHandler=function(func){ this.attachEvent("onClick",func); }; |
1584
|
|
|
|
1585
|
|
|
/** |
1586
|
|
|
* @desc: set function called when tree node selected or unselected, include any select change caused by any functionality |
1587
|
|
|
* @param: func - event handling function |
1588
|
|
|
* @type: deprecated |
1589
|
|
|
* @topic: 0,7 |
1590
|
|
|
* @event: onSelect |
1591
|
|
|
* @depricated: use grid.attachEvent("onSelect",func); instead |
1592
|
|
|
* @eventdesc: Event raises immideatly after selection in tree was changed |
1593
|
|
|
* @eventparam: selected item ID ( list of IDs in case of multiselection) |
1594
|
|
|
*/ |
1595
|
|
|
dhtmlXTreeObject.prototype.setOnSelectStateChange=function(func){ this.attachEvent("onSelect",func); }; |
1596
|
|
|
|
1597
|
|
|
|
1598
|
|
|
/** |
1599
|
|
|
* @desc: enables dynamic loading from XML |
1600
|
|
|
* @type: public |
1601
|
|
|
* @param: filePath - name of script returning XML; in case of virtual loading - user defined function |
1602
|
|
|
* @topic: 0 |
1603
|
|
|
*/ |
1604
|
|
|
dhtmlXTreeObject.prototype.setXMLAutoLoading=function(filePath){ this.XMLsource=filePath; }; |
1605
|
|
|
|
1606
|
|
|
/** |
1607
|
|
|
* @desc: set function called before checkbox checked/unchecked |
1608
|
|
|
* @param: func - event handling function |
1609
|
|
|
* @type: deprecated |
1610
|
|
|
* @topic: 0,7 |
1611
|
|
|
* @event: onCheck |
1612
|
|
|
* @depricated: use tree.attachEvent("onCheck",func); instead |
1613
|
|
|
* @eventdesc: Event raises right before item in tree was checked/unchecked. can be canceled (return false from event handler) |
1614
|
|
|
* @eventparam: ID of item which will be checked/unchecked |
1615
|
|
|
* @eventparam: Current checkbox state. 1 - item checked, 0 - item unchecked. |
1616
|
|
|
* @eventreturn: true - confirm changing checked state; false - deny chaning checked state; |
1617
|
|
|
*/ |
1618
|
|
|
dhtmlXTreeObject.prototype.setOnCheckHandler=function(func){ this.attachEvent("onCheck",func); }; |
1619
|
|
|
|
1620
|
|
|
|
1621
|
|
|
/** |
1622
|
|
|
* @desc: set function called before tree node opened/closed |
1623
|
|
|
* @param: func - event handling function |
1624
|
|
|
* @type: deprecated |
1625
|
|
|
* @topic: 0,7 |
1626
|
|
|
* @event: onOpen |
1627
|
|
|
* @depricated: use grid.attachEvent("onOpenStart",func); instead |
1628
|
|
|
* @eventdesc: Event raises immideatly after item in tree got command to open/close , and before item was opened//closed. Event also raised for unclosable nodes and nodes without open/close functionality - in that case result of function will be ignored. |
1629
|
|
|
Event does not occur if node was opened by dhtmlXtree API. |
1630
|
|
|
* @eventparam: ID of node which will be opened/closed |
1631
|
|
|
* @eventparam: Current open state of tree item. 0 - item has not children, -1 - item closed, 1 - item opened. |
1632
|
|
|
* @eventreturn: true - confirm opening/closing; false - deny opening/closing; |
1633
|
|
|
*/ |
1634
|
|
|
dhtmlXTreeObject.prototype.setOnOpenHandler=function(func){ this.attachEvent("onOpenStart",func); }; |
1635
|
|
|
/** |
1636
|
|
|
* @desc: set function called before tree node opened/closed |
1637
|
|
|
* @param: func - event handling function |
1638
|
|
|
* @type: deprecated |
1639
|
|
|
* @topic: 0,7 |
1640
|
|
|
* @event: onOpenStart |
1641
|
|
|
* @depricated: use grid.attachEvent("onOpenStart",func); instead |
1642
|
|
|
* @eventdesc: Event raises immideatly after item in tree got command to open/close , and before item was opened//closed. Event also raised for unclosable nodes and nodes without open/close functionality - in that case result of function will be ignored. |
1643
|
|
|
Event not raised if node opened by dhtmlXtree API. |
1644
|
|
|
* @eventparam: ID of node which will be opened/closed |
1645
|
|
|
* @eventparam: Current open state of tree item. 0 - item has not children, -1 - item closed, 1 - item opened. |
1646
|
|
|
* @eventreturn: true - confirm opening/closing; false - deny opening/closing; |
1647
|
|
|
*/ |
1648
|
|
|
dhtmlXTreeObject.prototype.setOnOpenStartHandler=function(func){ this.attachEvent("onOpenStart",func); }; |
1649
|
|
|
|
1650
|
|
|
/** |
1651
|
|
|
* @desc: set function called after tree node opened/closed |
1652
|
|
|
* @param: func - event handling function |
1653
|
|
|
* @type: deprecated |
1654
|
|
|
* @topic: 0,7 |
1655
|
|
|
* @event: onOpenEnd |
1656
|
|
|
* @depricated: use grid.attachEvent("onOpenEnd",func); instead |
1657
|
|
|
* @eventdesc: Event raises immideatly after item in tree was opened//closed. Event also raised for unclosable nodes and nodes without open/close functionality - in that case result of function will be ignored. |
1658
|
|
|
Event not raised if node opened by dhtmlXtree API. |
1659
|
|
|
* @eventparam: ID of node which will be opened/closed |
1660
|
|
|
* @eventparam: Current open state of tree item. 0 - item has not children, -1 - item closed, 1 - item opened. |
1661
|
|
|
*/ |
1662
|
|
|
dhtmlXTreeObject.prototype.setOnOpenEndHandler=function(func){ this.attachEvent("onOpenEnd",func); }; |
1663
|
|
|
|
1664
|
|
|
/** |
1665
|
|
|
* @desc: set function called when tree node double clicked |
1666
|
|
|
* @param: func - event handling function |
1667
|
|
|
* @type: public |
1668
|
|
|
* @topic: 0,7 |
1669
|
|
|
* @event: onDblClick |
1670
|
|
|
* @depricated: use grid.attachEvent("onDblClick",func); instead |
1671
|
|
|
* @eventdesc: Event raised immideatly after item in tree was doubleclicked, before default onDblClick functionality was processed. |
1672
|
|
|
Beware using both onClick and onDblClick events, because component can generate onClick event before onDblClick event while doubleclicking item in tree. |
1673
|
|
|
( that behavior depend on used browser ) |
1674
|
|
|
* @eventparam: ID of item which was doubleclicked |
1675
|
|
|
* @eventreturn: true - confirm opening/closing; false - deny opening/closing; |
1676
|
|
|
*/ |
1677
|
|
|
dhtmlXTreeObject.prototype.setOnDblClickHandler=function(func){ this.attachEvent("onDblClick",func); }; |
1678
|
|
|
|
1679
|
|
|
|
1680
|
|
|
|
1681
|
|
|
|
1682
|
|
|
|
1683
|
|
|
|
1684
|
|
|
|
1685
|
|
|
|
1686
|
|
|
|
1687
|
|
|
/** |
1688
|
|
|
* @desc: expand target node and all sub nodes |
1689
|
|
|
* @type: public |
1690
|
|
|
* @param: itemId - node id |
1691
|
|
|
* @topic: 4 |
1692
|
|
|
*/ |
1693
|
|
|
dhtmlXTreeObject.prototype.openAllItems=function(itemId) |
1694
|
|
|
{ |
1695
|
|
|
var temp=this._globalIdStorageFind(itemId); |
1696
|
|
|
if (!temp) return 0; |
1697
|
|
|
this._xopenAll(temp); |
1698
|
|
|
}; |
1699
|
|
|
|
1700
|
|
|
/** |
1701
|
|
|
* @desc: return open/close state |
1702
|
|
|
* @type: public |
1703
|
|
|
* @param: itemId - node id |
1704
|
|
|
* @return: -1 - close, 1 - opened, 0 - node doesn't have children |
1705
|
|
|
* @topic: 4 |
1706
|
|
|
*/ |
1707
|
|
|
dhtmlXTreeObject.prototype.getOpenState=function(itemId){ |
1708
|
|
|
var temp=this._globalIdStorageFind(itemId); |
1709
|
|
|
if (!temp) return ""; |
1710
|
|
|
return this._getOpenState(temp); |
1711
|
|
|
}; |
1712
|
|
|
|
1713
|
|
|
/** |
1714
|
|
|
* @desc: collapse target node and all sub nodes |
1715
|
|
|
* @type: public |
1716
|
|
|
* @param: itemId - node id |
1717
|
|
|
* @topic: 4 |
1718
|
|
|
*/ |
1719
|
|
|
dhtmlXTreeObject.prototype.closeAllItems=function(itemId) |
1720
|
|
|
{ |
1721
|
|
|
if (itemId===window.undefined) itemId=this.rootId; |
1722
|
|
|
|
1723
|
|
|
var temp=this._globalIdStorageFind(itemId); |
1724
|
|
|
if (!temp) return 0; |
1725
|
|
|
this._xcloseAll(temp); |
1726
|
|
|
|
1727
|
|
|
//nb:solves standard doctype prb in IE |
1728
|
|
|
this.allTree.childNodes[0].border = "1"; |
1729
|
|
|
this.allTree.childNodes[0].border = "0"; |
1730
|
|
|
|
1731
|
|
|
}; |
1732
|
|
|
|
1733
|
|
|
|
1734
|
|
|
/** |
1735
|
|
|
* @desc: set user data for target node |
1736
|
|
|
* @type: public |
1737
|
|
|
* @param: itemId - target node id |
1738
|
|
|
* @param: name - key for user data |
1739
|
|
|
* @param: value - user data value |
1740
|
|
|
* @topic: 5 |
1741
|
|
|
*/ |
1742
|
|
|
dhtmlXTreeObject.prototype.setUserData=function(itemId,name,value){ |
1743
|
|
|
var sNode=this._globalIdStorageFind(itemId,0,true); |
1744
|
|
|
if (!sNode) return; |
1745
|
|
|
if(name=="hint") |
1746
|
|
|
sNode.htmlNode.childNodes[0].childNodes[0].title=value; |
1747
|
|
|
if (typeof(sNode.userData["t_"+name])=="undefined"){ |
1748
|
|
|
if (!sNode._userdatalist) sNode._userdatalist=name; |
1749
|
|
|
else sNode._userdatalist+=","+name; |
1750
|
|
|
} |
1751
|
|
|
sNode.userData["t_"+name]=value; |
1752
|
|
|
}; |
1753
|
|
|
|
1754
|
|
|
/** |
1755
|
|
|
* @desc: get user data from target node |
1756
|
|
|
* @type: public |
1757
|
|
|
* @param: itemId - target node id |
1758
|
|
|
* @param: name - key for user data |
1759
|
|
|
* @return: value of user data |
1760
|
|
|
* @topic: 5 |
1761
|
|
|
*/ |
1762
|
|
|
dhtmlXTreeObject.prototype.getUserData=function(itemId,name){ |
1763
|
|
|
var sNode=this._globalIdStorageFind(itemId,0,true); |
1764
|
|
|
if (!sNode) return; |
|
|
|
|
1765
|
|
|
return sNode.userData["t_"+name]; |
1766
|
|
|
}; |
1767
|
|
|
|
1768
|
|
|
|
1769
|
|
|
|
1770
|
|
|
|
1771
|
|
|
/** |
1772
|
|
|
* @desc: get node color (text color) |
1773
|
|
|
* @param: itemId - id of node |
1774
|
|
|
* @type: public |
1775
|
|
|
* @return: color of node (empty string for default color); |
1776
|
|
|
* @topic: 6 |
1777
|
|
|
*/ |
1778
|
|
|
dhtmlXTreeObject.prototype.getItemColor=function(itemId) |
1779
|
|
|
{ |
1780
|
|
|
var temp=this._globalIdStorageFind(itemId); |
1781
|
|
|
if (!temp) return 0; |
1782
|
|
|
|
1783
|
|
|
var res= new Object(); |
1784
|
|
|
if (temp.acolor) res.acolor=temp.acolor; |
1785
|
|
|
if (temp.scolor) res.scolor=temp.scolor; |
1786
|
|
|
return res; |
1787
|
|
|
}; |
1788
|
|
|
/** |
1789
|
|
|
* @desc: set node text color |
1790
|
|
|
* @param: itemId - id of node |
1791
|
|
|
* @param: defaultColor - node color |
1792
|
|
|
* @param: selectedColor - selected node color |
1793
|
|
|
* @type: public |
1794
|
|
|
* @topic: 6 |
1795
|
|
|
*/ |
1796
|
|
|
dhtmlXTreeObject.prototype.setItemColor=function(itemId,defaultColor,selectedColor) |
1797
|
|
|
{ |
1798
|
|
|
if ((itemId)&&(itemId.span)) |
1799
|
|
|
var temp=itemId; |
1800
|
|
|
else |
1801
|
|
|
var temp=this._globalIdStorageFind(itemId); |
1802
|
|
|
if (!temp) return 0; |
1803
|
|
|
else { |
|
|
|
|
1804
|
|
|
if (temp.i_sel) |
1805
|
|
|
{ if (selectedColor) temp.span.style.color=selectedColor; } |
1806
|
|
|
else |
1807
|
|
|
{ if (defaultColor) temp.span.style.color=defaultColor; } |
1808
|
|
|
|
1809
|
|
|
if (selectedColor) temp.scolor=selectedColor; |
1810
|
|
|
if (defaultColor) temp.acolor=defaultColor; |
1811
|
|
|
} |
1812
|
|
|
}; |
1813
|
|
|
|
1814
|
|
|
/** |
1815
|
|
|
* @desc: return node text |
1816
|
|
|
* @param: itemId - id of node |
1817
|
|
|
* @type: public |
1818
|
|
|
* @return: text of item (with HTML formatting, if any) |
1819
|
|
|
* @topic: 6 |
1820
|
|
|
*/ |
1821
|
|
|
dhtmlXTreeObject.prototype.getItemText=function(itemId) |
1822
|
|
|
{ |
1823
|
|
|
var temp=this._globalIdStorageFind(itemId); |
1824
|
|
|
if (!temp) return 0; |
1825
|
|
|
return(temp.htmlNode.childNodes[0].childNodes[0].childNodes[3].childNodes[0].innerHTML); |
1826
|
|
|
}; |
1827
|
|
|
/** |
1828
|
|
|
* @desc: return parent item id |
1829
|
|
|
* @param: itemId - id of node |
1830
|
|
|
* @type: public |
1831
|
|
|
* @return: id of parent item |
1832
|
|
|
* @topic: 4 |
1833
|
|
|
*/ |
1834
|
|
|
dhtmlXTreeObject.prototype.getParentId=function(itemId) |
1835
|
|
|
{ |
1836
|
|
|
var temp=this._globalIdStorageFind(itemId); |
1837
|
|
|
if ((!temp)||(!temp.parentObject)) return ""; |
1838
|
|
|
return temp.parentObject.id; |
1839
|
|
|
}; |
1840
|
|
|
|
1841
|
|
|
|
1842
|
|
|
|
1843
|
|
|
/** |
1844
|
|
|
* @desc: change item id |
1845
|
|
|
* @type: public |
1846
|
|
|
* @param: itemId - old node id |
1847
|
|
|
* @param: newItemId - new node id |
1848
|
|
|
* @topic: 4 |
1849
|
|
|
*/ |
1850
|
|
|
dhtmlXTreeObject.prototype.changeItemId=function(itemId,newItemId) |
1851
|
|
|
{ |
1852
|
|
|
if (itemId==newItemId) return; |
|
|
|
|
1853
|
|
|
var temp=this._globalIdStorageFind(itemId); |
1854
|
|
|
if (!temp) return 0; |
1855
|
|
|
temp.id=newItemId; |
1856
|
|
|
temp.span.contextMenuId=newItemId; |
1857
|
|
|
this._idpull[newItemId]=this._idpull[itemId]; |
1858
|
|
|
delete this._idpull[itemId]; |
1859
|
|
|
}; |
1860
|
|
|
|
1861
|
|
|
|
1862
|
|
|
/** |
1863
|
|
|
* @desc: mark selected item as cut |
1864
|
|
|
* @type: public |
1865
|
|
|
* @topic: 2 |
1866
|
|
|
*/ |
1867
|
|
|
dhtmlXTreeObject.prototype.doCut=function(){ |
1868
|
|
|
if (this.nodeCut) this.clearCut(); |
1869
|
|
|
this.nodeCut=(new Array()).concat(this._selected); |
1870
|
|
|
for (var i=0; i<this.nodeCut.length; i++){ |
1871
|
|
|
var tempa=this.nodeCut[i]; |
1872
|
|
|
tempa._cimgs=new Array(); |
1873
|
|
|
tempa._cimgs[0]=tempa.images[0]; |
1874
|
|
|
tempa._cimgs[1]=tempa.images[1]; |
1875
|
|
|
tempa._cimgs[2]=tempa.images[2]; |
1876
|
|
|
tempa.images[0]=tempa.images[1]=tempa.images[2]=this.cutImage; |
1877
|
|
|
this._correctPlus(tempa); |
1878
|
|
|
} |
1879
|
|
|
}; |
1880
|
|
|
|
1881
|
|
|
/** |
1882
|
|
|
* @desc: insert previously cut branch |
1883
|
|
|
* @param: itemId - id of new parent node |
1884
|
|
|
* @type: public |
1885
|
|
|
* @topic: 2 |
1886
|
|
|
*/ |
1887
|
|
|
dhtmlXTreeObject.prototype.doPaste=function(itemId){ |
1888
|
|
|
var tobj=this._globalIdStorageFind(itemId); |
1889
|
|
|
if (!tobj) return 0; |
1890
|
|
|
for (var i=0; i<this.nodeCut.length; i++){ |
1891
|
|
|
if (this._checkPNodes(tobj,this.nodeCut[i])) continue; |
1892
|
|
|
this._moveNode(this.nodeCut[i],tobj); |
1893
|
|
|
} |
1894
|
|
|
this.clearCut(); |
1895
|
|
|
}; |
1896
|
|
|
|
1897
|
|
|
/** |
1898
|
|
|
* @desc: clear cut |
1899
|
|
|
* @type: public |
1900
|
|
|
* @topic: 2 |
1901
|
|
|
*/ |
1902
|
|
|
dhtmlXTreeObject.prototype.clearCut=function(){ |
1903
|
|
|
for (var i=0; i<this.nodeCut.length; i++) |
1904
|
|
|
{ |
1905
|
|
|
var tempa=this.nodeCut[i]; |
1906
|
|
|
tempa.images[0]=tempa._cimgs[0]; |
1907
|
|
|
tempa.images[1]=tempa._cimgs[1]; |
1908
|
|
|
tempa.images[2]=tempa._cimgs[2]; |
1909
|
|
|
this._correctPlus(tempa); |
1910
|
|
|
} |
1911
|
|
|
this.nodeCut=new Array(); |
1912
|
|
|
}; |
1913
|
|
|
|
1914
|
|
|
|
1915
|
|
|
|
1916
|
|
|
/** |
1917
|
|
|
* @desc: move node with subnodes |
1918
|
|
|
* @type: private |
1919
|
|
|
* @param: itemObject - moved node object |
1920
|
|
|
* @param: targetObject - new parent node |
1921
|
|
|
* @topic: 2 |
1922
|
|
|
*/ |
1923
|
|
|
dhtmlXTreeObject.prototype._moveNode=function(itemObject,targetObject){ |
1924
|
|
|
|
1925
|
|
|
return this._moveNodeTo(itemObject,targetObject); |
1926
|
|
|
|
1927
|
|
|
} |
1928
|
|
|
|
1929
|
|
|
/** |
1930
|
|
|
* @desc: fix order of nodes in collection |
1931
|
|
|
* @type: private |
1932
|
|
|
* @param: target - parent item node |
1933
|
|
|
* @param: zParent - before node |
1934
|
|
|
* @edition: Professional |
1935
|
|
|
* @topic: 2 |
1936
|
|
|
*/ |
1937
|
|
|
|
1938
|
|
|
dhtmlXTreeObject.prototype._fixNodesCollection=function(target,zParent){ |
1939
|
|
|
var flag=0; var icount=0; |
1940
|
|
|
var Nodes=target.childNodes; |
1941
|
|
|
var Count=target.childsCount-1; |
1942
|
|
|
|
1943
|
|
|
if (zParent==Nodes[Count]) return; |
1944
|
|
|
for (var i=0; i<Count; i++) |
1945
|
|
|
if (Nodes[i]==Nodes[Count]) { Nodes[i]=Nodes[i+1]; Nodes[i+1]=Nodes[Count]; } |
1946
|
|
|
|
1947
|
|
|
// Count=target.childsCount; |
1948
|
|
|
for (var i=0; i<Count+1; i++) |
1949
|
|
|
{ |
1950
|
|
|
if (flag) { |
1951
|
|
|
var temp=Nodes[i]; |
1952
|
|
|
Nodes[i]=flag; |
1953
|
|
|
flag=temp; |
1954
|
|
|
} |
1955
|
|
|
else |
1956
|
|
|
if (Nodes[i]==zParent) { flag=Nodes[i]; Nodes[i]=Nodes[Count]; } |
1957
|
|
|
} |
1958
|
|
|
}; |
1959
|
|
|
|
1960
|
|
|
/** |
1961
|
|
|
* @desc: recreate branch |
1962
|
|
|
* @type: private |
1963
|
|
|
* @param: itemObject - moved node object |
1964
|
|
|
* @param: targetObject - new parent node |
1965
|
|
|
* @param: level - top level flag |
1966
|
|
|
* @param: beforeNode - node for sibling mode |
1967
|
|
|
* @mode: mode - DragAndDrop mode (0 - as child, 1 as sibling) |
1968
|
|
|
* @edition: Professional |
1969
|
|
|
* @topic: 2 |
1970
|
|
|
*/ |
1971
|
|
|
dhtmlXTreeObject.prototype._recreateBranch=function(itemObject,targetObject,beforeNode,level){ |
1972
|
|
|
var i; var st=""; |
1973
|
|
|
if (beforeNode){ |
1974
|
|
|
for (i=0; i<targetObject.childsCount; i++) |
1975
|
|
|
if (targetObject.childNodes[i]==beforeNode) break; |
1976
|
|
|
|
1977
|
|
|
if (i!=0) |
1978
|
|
|
beforeNode=targetObject.childNodes[i-1]; |
1979
|
|
|
else{ |
1980
|
|
|
st="TOP"; |
1981
|
|
|
beforeNode=""; |
1982
|
|
|
} |
1983
|
|
|
} |
1984
|
|
|
|
1985
|
|
|
var t2=this._onradh; this._onradh=null; |
1986
|
|
|
var newNode=this._attachChildNode(targetObject,itemObject.id,itemObject.label,0,itemObject.images[0],itemObject.images[1],itemObject.images[2],st,0,beforeNode); |
1987
|
|
|
|
1988
|
|
|
//copy user data |
1989
|
|
|
newNode._userdatalist=itemObject._userdatalist; |
1990
|
|
|
newNode.userData=itemObject.userData.clone(); |
1991
|
|
|
if(itemObject._attrs){ |
1992
|
|
|
newNode._attrs={}; |
1993
|
|
|
for(var attr in itemObject._attrs) |
1994
|
|
|
newNode._attrs[attr] = itemObject._attrs[attr]; |
1995
|
|
|
} |
1996
|
|
|
|
1997
|
|
|
newNode.XMLload=itemObject.XMLload; |
1998
|
|
|
if (t2){ |
1999
|
|
|
this._onradh=t2; this._onradh(newNode.id); } |
2000
|
|
|
|
2001
|
|
|
|
2002
|
|
|
for (var i=0; i<itemObject.childsCount; i++) |
2003
|
|
|
this._recreateBranch(itemObject.childNodes[i],newNode,0,1); |
2004
|
|
|
|
2005
|
|
|
|
2006
|
|
|
return newNode; |
2007
|
|
|
} |
2008
|
|
|
|
2009
|
|
|
/** |
2010
|
|
|
* @desc: move single node |
2011
|
|
|
* @type: private |
2012
|
|
|
* @param: itemObject - moved node object |
2013
|
|
|
* @param: targetObject - new parent node |
2014
|
|
|
* @mode: mode - DragAndDrop mode (0 - as child, 1 as sibling) |
2015
|
|
|
* @topic: 2 |
2016
|
|
|
*/ |
2017
|
|
|
dhtmlXTreeObject.prototype._moveNodeTo=function(itemObject,targetObject,beforeNode){ |
2018
|
|
|
//return; |
2019
|
|
|
if (itemObject.treeNod._nonTrivialNode) |
2020
|
|
|
return itemObject.treeNod._nonTrivialNode(this,targetObject,beforeNode,itemObject); |
2021
|
|
|
|
2022
|
|
|
if (this._checkPNodes(targetObject,itemObject)) |
2023
|
|
|
return false; |
2024
|
|
|
|
2025
|
|
|
if (targetObject.mytype) |
2026
|
|
|
var framesMove=(itemObject.treeNod.lWin!=targetObject.lWin); |
2027
|
|
|
else |
2028
|
|
|
var framesMove=(itemObject.treeNod.lWin!=targetObject.treeNod.lWin); |
2029
|
|
|
|
2030
|
|
|
if (!this.callEvent("onDrag",[itemObject.id,targetObject.id,(beforeNode?beforeNode.id:null),itemObject.treeNod,targetObject.treeNod])) return false; |
2031
|
|
|
if ((targetObject.XMLload==0)&&(this.XMLsource)) |
2032
|
|
|
{ |
2033
|
|
|
targetObject.XMLload=1; |
2034
|
|
|
this._loadDynXML(targetObject.id); |
2035
|
|
|
} |
2036
|
|
|
this.openItem(targetObject.id); |
2037
|
|
|
|
2038
|
|
|
var oldTree=itemObject.treeNod; |
2039
|
|
|
var c=itemObject.parentObject.childsCount; |
2040
|
|
|
var z=itemObject.parentObject; |
2041
|
|
|
|
2042
|
|
|
|
2043
|
|
|
if ((framesMove)||(oldTree.dpcpy)) {//interframe drag flag |
2044
|
|
|
var _otiid=itemObject.id; |
2045
|
|
|
itemObject=this._recreateBranch(itemObject,targetObject,beforeNode); |
2046
|
|
|
if (!oldTree.dpcpy) oldTree.deleteItem(_otiid); |
2047
|
|
|
} |
2048
|
|
|
else |
2049
|
|
|
{ |
2050
|
|
|
|
2051
|
|
|
var Count=targetObject.childsCount; var Nodes=targetObject.childNodes; |
2052
|
|
|
if (Count==0) targetObject._open=true; |
2053
|
|
|
oldTree._unselectItem(itemObject); |
2054
|
|
|
Nodes[Count]=itemObject; |
2055
|
|
|
itemObject.treeNod=targetObject.treeNod; |
2056
|
|
|
targetObject.childsCount++; |
2057
|
|
|
|
2058
|
|
|
var tr=this._drawNewTr(Nodes[Count].htmlNode); |
2059
|
|
|
|
2060
|
|
|
if (!beforeNode) |
2061
|
|
|
{ |
2062
|
|
|
targetObject.htmlNode.childNodes[0].appendChild(tr); |
2063
|
|
|
if (this.dadmode==1) this._fixNodesCollection(targetObject,beforeNode); |
2064
|
|
|
} |
2065
|
|
|
else |
2066
|
|
|
{ |
2067
|
|
|
targetObject.htmlNode.childNodes[0].insertBefore(tr,beforeNode.tr); |
2068
|
|
|
this._fixNodesCollection(targetObject,beforeNode); |
2069
|
|
|
Nodes=targetObject.childNodes; |
2070
|
|
|
} |
2071
|
|
|
|
2072
|
|
|
|
2073
|
|
|
} |
2074
|
|
|
|
2075
|
|
|
if ((!oldTree.dpcpy)&&(!framesMove)) { |
2076
|
|
|
var zir=itemObject.tr; |
2077
|
|
|
|
2078
|
|
|
if ((document.all)&&(navigator.appVersion.search(/MSIE\ 5\.0/gi)!=-1)) |
2079
|
|
|
{ |
2080
|
|
|
window.setTimeout(function() { zir.parentNode.removeChild(zir); } , 250 ); |
2081
|
|
|
} |
2082
|
|
|
else //if (zir.parentNode) zir.parentNode.removeChild(zir,true); |
2083
|
|
|
|
2084
|
|
|
itemObject.parentObject.htmlNode.childNodes[0].removeChild(itemObject.tr); |
2085
|
|
|
|
2086
|
|
|
//itemObject.tr.removeNode(true); |
2087
|
|
|
if ((!beforeNode)||(targetObject!=itemObject.parentObject)){ |
2088
|
|
|
for (var i=0; i<z.childsCount; i++){ |
2089
|
|
|
if (z.childNodes[i].id==itemObject.id) { |
2090
|
|
|
z.childNodes[i]=0; |
2091
|
|
|
break; }}} |
2092
|
|
|
else z.childNodes[z.childsCount-1]=0; |
2093
|
|
|
|
2094
|
|
|
oldTree._compressChildList(z.childsCount,z.childNodes); |
2095
|
|
|
z.childsCount--; |
2096
|
|
|
} |
2097
|
|
|
|
2098
|
|
|
|
2099
|
|
|
if ((!framesMove)&&(!oldTree.dpcpy)) { |
2100
|
|
|
itemObject.tr=tr; |
2101
|
|
|
tr.nodem=itemObject; |
2102
|
|
|
itemObject.parentObject=targetObject; |
2103
|
|
|
|
2104
|
|
|
if (oldTree!=targetObject.treeNod) { |
2105
|
|
|
if(itemObject.treeNod._registerBranch(itemObject,oldTree)) return; this._clearStyles(itemObject); this._redrawFrom(this,itemObject.parentObject); |
|
|
|
|
2106
|
|
|
if(this._onradh) this._onradh(itemObject.id); |
2107
|
|
|
}; |
2108
|
|
|
|
2109
|
|
|
this._correctPlus(targetObject); |
2110
|
|
|
this._correctLine(targetObject); |
2111
|
|
|
|
2112
|
|
|
this._correctLine(itemObject); |
2113
|
|
|
this._correctPlus(itemObject); |
2114
|
|
|
|
2115
|
|
|
//fix target siblings |
2116
|
|
|
if (beforeNode) |
2117
|
|
|
{ |
2118
|
|
|
|
2119
|
|
|
this._correctPlus(beforeNode); |
2120
|
|
|
//this._correctLine(beforeNode); |
2121
|
|
|
} |
2122
|
|
|
else |
2123
|
|
|
if (targetObject.childsCount>=2) |
2124
|
|
|
{ |
2125
|
|
|
|
2126
|
|
|
this._correctPlus(Nodes[targetObject.childsCount-2]); |
2127
|
|
|
this._correctLine(Nodes[targetObject.childsCount-2]); |
2128
|
|
|
} |
2129
|
|
|
|
2130
|
|
|
this._correctPlus(Nodes[targetObject.childsCount-1]); |
2131
|
|
|
//this._correctLine(Nodes[targetObject.childsCount-1]); |
2132
|
|
|
|
2133
|
|
|
|
2134
|
|
|
if (this.tscheck) this._correctCheckStates(targetObject); |
2135
|
|
|
if (oldTree.tscheck) oldTree._correctCheckStates(z); |
2136
|
|
|
|
2137
|
|
|
} |
2138
|
|
|
|
2139
|
|
|
//fix source parent |
2140
|
|
|
|
2141
|
|
|
if (c>1) { oldTree._correctPlus(z.childNodes[c-2]); |
2142
|
|
|
oldTree._correctLine(z.childNodes[c-2]); |
2143
|
|
|
} |
2144
|
|
|
|
2145
|
|
|
|
2146
|
|
|
// if (z.childsCount==0) |
2147
|
|
|
oldTree._correctPlus(z); |
2148
|
|
|
oldTree._correctLine(z); |
2149
|
|
|
|
2150
|
|
|
|
2151
|
|
|
this.callEvent("onDrop",[itemObject.id,targetObject.id,(beforeNode?beforeNode.id:null),oldTree,targetObject.treeNod]); |
2152
|
|
|
return itemObject.id; |
2153
|
|
|
}; |
2154
|
|
|
|
2155
|
|
|
|
2156
|
|
|
|
2157
|
|
|
/** |
2158
|
|
|
* @desc: recursive set default styles for node |
2159
|
|
|
* @type: private |
2160
|
|
|
* @param: itemObject - target node object |
2161
|
|
|
* @topic: 6 |
2162
|
|
|
*/ |
2163
|
|
|
dhtmlXTreeObject.prototype._clearStyles=function(itemObject){ |
2164
|
|
|
if (!itemObject.htmlNode) return; //some weird case in SRND mode |
2165
|
|
|
var td1=itemObject.htmlNode.childNodes[0].childNodes[0].childNodes[1]; |
2166
|
|
|
var td3=td1.nextSibling.nextSibling; |
2167
|
|
|
|
2168
|
|
|
itemObject.span.innerHTML=itemObject.label; |
2169
|
|
|
itemObject.i_sel=false; |
2170
|
|
|
|
2171
|
|
|
if (itemObject._aimgs) |
2172
|
|
|
this.dragger.removeDraggableItem(td1.nextSibling); |
2173
|
|
|
|
2174
|
|
|
if (this.checkBoxOff) { |
2175
|
|
|
td1.childNodes[0].style.display=""; |
2176
|
|
|
td1.childNodes[0].onclick=this.onCheckBoxClick; |
2177
|
|
|
this._setSrc(td1.childNodes[0],this.imPath+this.checkArray[itemObject.checkstate]); |
2178
|
|
|
} |
2179
|
|
|
else td1.childNodes[0].style.display="none"; |
2180
|
|
|
td1.childNodes[0].treeNod=this; |
2181
|
|
|
|
2182
|
|
|
this.dragger.removeDraggableItem(td3); |
2183
|
|
|
if (this.dragAndDropOff) this.dragger.addDraggableItem(td3,this); |
2184
|
|
|
if (this._aimgs) this.dragger.addDraggableItem(td1.nextSibling,this); |
2185
|
|
|
|
2186
|
|
|
td3.childNodes[0].className="standartTreeRow"; |
2187
|
|
|
td3.onclick=this.onRowSelect; td3.ondblclick=this.onRowClick2; |
2188
|
|
|
td1.previousSibling.onclick=this.onRowClick; |
2189
|
|
|
|
2190
|
|
|
this._correctLine(itemObject); |
2191
|
|
|
this._correctPlus(itemObject); |
2192
|
|
|
for (var i=0; i<itemObject.childsCount; i++) this._clearStyles(itemObject.childNodes[i]); |
2193
|
|
|
|
2194
|
|
|
}; |
2195
|
|
|
/** |
2196
|
|
|
* @desc: register node and all children nodes |
2197
|
|
|
* @type: private |
2198
|
|
|
* @param: itemObject - node object |
2199
|
|
|
* @topic: 2 |
2200
|
|
|
*/ |
2201
|
|
|
dhtmlXTreeObject.prototype._registerBranch=function(itemObject,oldTree){ |
2202
|
|
|
if (oldTree) oldTree._globalIdStorageSub(itemObject.id); |
2203
|
|
|
itemObject.id=this._globalIdStorageAdd(itemObject.id,itemObject); |
2204
|
|
|
itemObject.treeNod=this; |
2205
|
|
|
for (var i=0; i<itemObject.childsCount; i++) |
2206
|
|
|
this._registerBranch(itemObject.childNodes[i],oldTree); |
2207
|
|
|
return 0; |
2208
|
|
|
}; |
2209
|
|
|
|
2210
|
|
|
|
2211
|
|
|
/** |
2212
|
|
|
* @desc: enable three state checkboxes |
2213
|
|
|
* @beforeInit: 1 |
2214
|
|
|
* @param: mode - 1 - on, 0 - off; |
2215
|
|
|
* @type: public |
2216
|
|
|
* @topic: 0 |
2217
|
|
|
*/ |
2218
|
|
|
dhtmlXTreeObject.prototype.enableThreeStateCheckboxes=function(mode) { this.tscheck=convertStringToBoolean(mode); }; |
2219
|
|
|
|
2220
|
|
|
|
2221
|
|
|
/** |
2222
|
|
|
* @desc: set function called when mouse is over tree node |
2223
|
|
|
* @param: func - event handling function |
2224
|
|
|
* @type: deprecated |
2225
|
|
|
* @topic: 0,7 |
2226
|
|
|
* @event: onMouseIn |
2227
|
|
|
* @depricated: use grid.attachEvent("onMouseIn",func); instead |
2228
|
|
|
* @eventdesc: Event raised immideatly after mouse started moving over item |
2229
|
|
|
* @eventparam: ID of item |
2230
|
|
|
*/ |
2231
|
|
|
dhtmlXTreeObject.prototype.setOnMouseInHandler=function(func){ |
2232
|
|
|
this.ehlt=true; |
2233
|
|
|
this.attachEvent("onMouseIn",func); |
2234
|
|
|
}; |
2235
|
|
|
|
2236
|
|
|
/** |
2237
|
|
|
* @desc: set function called when mouse is out of tree node |
2238
|
|
|
* @param: func - event handling function |
2239
|
|
|
* @type: deprecated |
2240
|
|
|
* @topic: 0,7 |
2241
|
|
|
* @event: onMouseOut |
2242
|
|
|
* @depricated: use grid.attachEvent("onMouseOut",func); instead |
2243
|
|
|
* @eventdesc: Event raised immideatly after mouse moved out of item |
2244
|
|
|
* @eventparam: ID of clicked item |
2245
|
|
|
*/ |
2246
|
|
|
dhtmlXTreeObject.prototype.setOnMouseOutHandler=function(func){ |
2247
|
|
|
this.ehlt=true; |
2248
|
|
|
this.attachEvent("onMouseOut",func); |
2249
|
|
|
}; |
2250
|
|
|
|
2251
|
|
|
|
2252
|
|
|
|
2253
|
|
|
|
2254
|
|
|
|
2255
|
|
|
|
2256
|
|
|
|
2257
|
|
|
|
2258
|
|
|
|
2259
|
|
|
/** |
2260
|
|
|
* @desc: enable tree images |
2261
|
|
|
* @beforeInit: 1 |
2262
|
|
|
* @param: mode - 1 - on, 0 - off; |
2263
|
|
|
* @type: public |
2264
|
|
|
* @topic: 0 |
2265
|
|
|
*/ |
2266
|
|
|
dhtmlXTreeObject.prototype.enableTreeImages=function(mode) { this.timgen=convertStringToBoolean(mode); }; |
2267
|
|
|
|
2268
|
|
|
|
2269
|
|
|
|
2270
|
|
|
/** |
2271
|
|
|
* @desc: enable mode with fixed tables (looks better, but has no horisontal scrollbar) |
2272
|
|
|
* @beforeInit: 1 |
2273
|
|
|
* @param: mode - 1 - on, 0 - off; |
2274
|
|
|
* @type: private |
2275
|
|
|
* @topic: 0 |
2276
|
|
|
*/ |
2277
|
|
|
dhtmlXTreeObject.prototype.enableFixedMode=function(mode) { this.hfMode=convertStringToBoolean(mode); }; |
2278
|
|
|
|
2279
|
|
|
/** |
2280
|
|
|
* @desc: show/hide checkboxes (all checkboxes in tree) |
2281
|
|
|
* @type: public |
2282
|
|
|
* @param: mode - true/false |
2283
|
|
|
* @param: hidden - if set to true, checkboxes not rendered but can be shown by showItemCheckbox |
2284
|
|
|
* @topic: 0 |
2285
|
|
|
*/ |
2286
|
|
|
dhtmlXTreeObject.prototype.enableCheckBoxes=function(mode, hidden){ this.checkBoxOff=convertStringToBoolean(mode); this.cBROf=(!(this.checkBoxOff||convertStringToBoolean(hidden))); |
2287
|
|
|
}; |
2288
|
|
|
|
2289
|
|
|
/** |
2290
|
|
|
* @desc: enable/disable multiple selection |
2291
|
|
|
* @param: mode - true/false |
2292
|
|
|
* @param: strict - true/false |
2293
|
|
|
*/ |
2294
|
|
|
dhtmlXTreeObject.prototype.enableMultiselection = function(mode, strict) { |
2295
|
|
|
this._amsel = convertStringToBoolean(mode); |
2296
|
|
|
this._amselS = convertStringToBoolean(strict); |
2297
|
|
|
}; |
2298
|
|
|
/** |
2299
|
|
|
* @desc: set default images for nodes (must be called before XML loading) |
2300
|
|
|
* @type: public |
2301
|
|
|
* @param: a0 - image for node without children; |
2302
|
|
|
* @param: a1 - image for closed node; |
2303
|
|
|
* @param: a2 - image for opened node |
2304
|
|
|
* @topic: 6 |
2305
|
|
|
*/ |
2306
|
|
|
dhtmlXTreeObject.prototype.setStdImages=function(image1,image2,image3){ |
2307
|
|
|
this.imageArray[0]=image1; this.imageArray[1]=image2; this.imageArray[2]=image3;}; |
2308
|
|
|
|
2309
|
|
|
/** |
2310
|
|
|
* @desc: enable/disable tree lines (parent-child threads) |
2311
|
|
|
* @type: public |
2312
|
|
|
* @param: mode - enable/disable tree lines |
2313
|
|
|
* @topic: 6 |
2314
|
|
|
*/ |
2315
|
|
|
dhtmlXTreeObject.prototype.enableTreeLines=function(mode){ |
2316
|
|
|
this.treeLinesOn=convertStringToBoolean(mode); |
2317
|
|
|
} |
2318
|
|
|
|
2319
|
|
|
/** |
2320
|
|
|
* @desc: set images used for parent-child threads drawing (lines, plus, minus) |
2321
|
|
|
* @type: public |
2322
|
|
|
* @param: arrayName - name of array: plus, minus |
2323
|
|
|
* @param: image1 - line crossed image |
2324
|
|
|
* @param: image2 - image with top line |
2325
|
|
|
* @param: image3 - image with bottom line |
2326
|
|
|
* @param: image4 - image without line |
2327
|
|
|
* @param: image5 - single root image |
2328
|
|
|
* @topic: 6 |
2329
|
|
|
*/ |
2330
|
|
View Code Duplication |
dhtmlXTreeObject.prototype.setImageArrays=function(arrayName,image1,image2,image3,image4,image5){ |
2331
|
|
|
switch(arrayName){ |
2332
|
|
|
case "plus": this.plusArray[0]=image1; this.plusArray[1]=image2; this.plusArray[2]=image3; this.plusArray[3]=image4; this.plusArray[4]=image5; break; |
2333
|
|
|
case "minus": this.minusArray[0]=image1; this.minusArray[1]=image2; this.minusArray[2]=image3; this.minusArray[3]=image4; this.minusArray[4]=image5; break; |
2334
|
|
|
} |
2335
|
|
|
}; |
2336
|
|
|
|
2337
|
|
|
/** |
2338
|
|
|
* @desc: expand node |
2339
|
|
|
* @param: itemId - id of node |
2340
|
|
|
* @type: public |
2341
|
|
|
* @topic: 4 |
2342
|
|
|
*/ |
2343
|
|
|
dhtmlXTreeObject.prototype.openItem=function(itemId){ |
2344
|
|
|
this.skipLock = true; |
2345
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2346
|
|
|
if (!temp) return 0; |
2347
|
|
|
else return this._openItem(temp); |
|
|
|
|
2348
|
|
|
this.skipLock = false; |
|
|
|
|
2349
|
|
|
}; |
2350
|
|
|
|
2351
|
|
|
/** |
2352
|
|
|
* @desc: expand node |
2353
|
|
|
* @param: item - tree node object |
2354
|
|
|
* @type: private |
2355
|
|
|
* @editing: pro |
2356
|
|
|
* @topic: 4 |
2357
|
|
|
*/ |
2358
|
|
View Code Duplication |
dhtmlXTreeObject.prototype._openItem=function(item){ |
2359
|
|
|
var state=this._getOpenState(item); |
2360
|
|
|
if ((state<0)||(((this.XMLsource)&&(!item.XMLload)))){ |
2361
|
|
|
if (!this.callEvent("onOpenStart",[item.id,state])) return 0; |
2362
|
|
|
this._HideShow(item,2); |
2363
|
|
|
if (this.checkEvent("onOpenEnd")){ |
2364
|
|
|
if (this.onXLE==this._epnFHe) this._epnFHe(this,item.id,true); |
2365
|
|
|
if (!this.xmlstate || !this.XMLsource) |
2366
|
|
|
this.callEvent("onOpenEnd",[item.id,this._getOpenState(item)]); |
2367
|
|
|
else{ |
2368
|
|
|
this._oie_onXLE.push(this.onXLE); |
2369
|
|
|
this.onXLE=this._epnFHe; |
2370
|
|
|
} |
2371
|
|
|
} |
2372
|
|
|
} else if (this._srnd) this._HideShow(item,2); |
2373
|
|
|
if (item.parentObject && !this._skip_open_parent) this._openItem(item.parentObject); |
2374
|
|
|
}; |
2375
|
|
|
|
2376
|
|
|
/** |
2377
|
|
|
* @desc: collapse node |
2378
|
|
|
* @param: itemId - id of node |
2379
|
|
|
* @type: public |
2380
|
|
|
* @topic: 4 |
2381
|
|
|
*/ |
2382
|
|
|
dhtmlXTreeObject.prototype.closeItem=function(itemId){ |
2383
|
|
|
if (this.rootId==itemId) return 0; |
2384
|
|
|
this.skipLock = true; |
2385
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2386
|
|
|
if (!temp) return 0; |
2387
|
|
|
if (temp.closeble) |
2388
|
|
|
this._HideShow(temp,1); |
2389
|
|
|
this.skipLock = false; |
2390
|
|
|
}; |
2391
|
|
|
|
2392
|
|
|
|
2393
|
|
|
|
2394
|
|
|
|
2395
|
|
|
|
2396
|
|
|
|
2397
|
|
|
|
2398
|
|
|
|
2399
|
|
|
|
2400
|
|
|
|
2401
|
|
|
|
2402
|
|
|
|
2403
|
|
|
|
2404
|
|
|
|
2405
|
|
|
|
2406
|
|
|
|
2407
|
|
|
|
2408
|
|
|
|
2409
|
|
|
|
2410
|
|
|
|
2411
|
|
|
|
2412
|
|
|
|
2413
|
|
|
|
2414
|
|
|
|
2415
|
|
|
|
2416
|
|
|
|
2417
|
|
|
/** |
2418
|
|
|
* @desc: get node level (position in hierarchy) |
2419
|
|
|
* @param: itemId - id of node |
2420
|
|
|
* @type: public |
2421
|
|
|
* @return: node level (0 if no such item in hierarchy - probably super root) |
2422
|
|
|
* @topic: 4 |
2423
|
|
|
*/ |
2424
|
|
|
dhtmlXTreeObject.prototype.getLevel=function(itemId){ |
2425
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2426
|
|
|
if (!temp) return 0; |
2427
|
|
|
return this._getNodeLevel(temp,0); |
2428
|
|
|
}; |
2429
|
|
|
|
2430
|
|
|
|
2431
|
|
|
|
2432
|
|
|
/** |
2433
|
|
|
* @desc: prevent node from closing |
2434
|
|
|
* @param: itemId - id of node |
2435
|
|
|
* @param: flag - if 0 - node can't be closed, else node can be closed |
2436
|
|
|
* @type: public |
2437
|
|
|
* @topic: 4 |
2438
|
|
|
*/ |
2439
|
|
|
dhtmlXTreeObject.prototype.setItemCloseable=function(itemId,flag) |
2440
|
|
|
{ |
2441
|
|
|
flag=convertStringToBoolean(flag); |
2442
|
|
|
if ((itemId)&&(itemId.span)) |
2443
|
|
|
var temp=itemId; |
2444
|
|
|
else |
2445
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2446
|
|
|
if (!temp) return 0; |
2447
|
|
|
temp.closeble=flag; |
2448
|
|
|
}; |
2449
|
|
|
|
2450
|
|
|
/** |
2451
|
|
|
* @desc: recursive function used for node level calculation |
2452
|
|
|
* @param: itemObject - pointer to node object |
2453
|
|
|
* @param: count - counter of levels |
2454
|
|
|
* @type: private |
2455
|
|
|
* @topic: 4 |
2456
|
|
|
*/ |
2457
|
|
|
dhtmlXTreeObject.prototype._getNodeLevel=function(itemObject,count){ |
2458
|
|
|
if (itemObject.parentObject) return this._getNodeLevel(itemObject.parentObject,count+1); |
2459
|
|
|
return(count); |
2460
|
|
|
}; |
2461
|
|
|
|
2462
|
|
|
/** |
2463
|
|
|
* @desc: return number of children |
2464
|
|
|
* @param: itemId - id of node |
2465
|
|
|
* @type: public |
2466
|
|
|
* @return: number of child items for loaded branches; true - for not loaded branches |
2467
|
|
|
* @topic: 4 |
2468
|
|
|
*/ |
2469
|
|
|
dhtmlXTreeObject.prototype.hasChildren=function(itemId){ |
2470
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2471
|
|
|
if (!temp) return 0; |
2472
|
|
|
else |
2473
|
|
|
{ |
|
|
|
|
2474
|
|
|
if ( (this.XMLsource)&&(!temp.XMLload) ) return true; |
2475
|
|
|
else |
2476
|
|
|
return temp.childsCount; |
|
|
|
|
2477
|
|
|
}; |
2478
|
|
|
}; |
2479
|
|
|
|
2480
|
|
|
|
2481
|
|
|
/** |
2482
|
|
|
* @desc: get number of leafs (nodes without children) |
2483
|
|
|
* @param: itemNode - node object |
2484
|
|
|
* @type: private |
2485
|
|
|
* @edition: Professional |
2486
|
|
|
* @topic: 4 |
2487
|
|
|
*/ |
2488
|
|
|
dhtmlXTreeObject.prototype._getLeafCount=function(itemNode){ |
2489
|
|
|
var a=0; |
2490
|
|
|
for (var b=0; b<itemNode.childsCount; b++) |
2491
|
|
|
if (itemNode.childNodes[b].childsCount==0) a++; |
2492
|
|
|
return a; |
2493
|
|
|
} |
2494
|
|
|
|
2495
|
|
|
|
2496
|
|
|
/** |
2497
|
|
|
* @desc: set new node text (HTML allowed) |
2498
|
|
|
* @param: itemId - id of node |
2499
|
|
|
* @param: newLabel - node text |
2500
|
|
|
* @param: newTooltip - (optional)tooltip for the node |
2501
|
|
|
* @type: public |
2502
|
|
|
* @topic: 6 |
2503
|
|
|
*/ |
2504
|
|
|
dhtmlXTreeObject.prototype.setItemText=function(itemId,newLabel,newTooltip) |
2505
|
|
|
{ |
2506
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2507
|
|
|
if (!temp) return 0; |
2508
|
|
|
temp.label=newLabel; |
2509
|
|
|
temp.span.innerHTML=newLabel; |
2510
|
|
|
|
2511
|
|
|
temp.span.parentNode.parentNode.title=newTooltip||""; |
2512
|
|
|
}; |
2513
|
|
|
|
2514
|
|
|
/** |
2515
|
|
|
* @desc: get item's tooltip |
2516
|
|
|
* @param: itemId - id of node |
2517
|
|
|
* @type: public |
2518
|
|
|
* @topic: 6 |
2519
|
|
|
*/ |
2520
|
|
|
dhtmlXTreeObject.prototype.getItemTooltip=function(itemId){ |
2521
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2522
|
|
|
if (!temp) return ""; |
2523
|
|
|
return (temp.span.parentNode.parentNode._dhx_title||temp.span.parentNode.parentNode.title||""); |
2524
|
|
|
}; |
2525
|
|
|
|
2526
|
|
|
/** |
2527
|
|
|
* @desc: refresh tree branch from xml (XML with child nodes rerequested from server) |
2528
|
|
|
* @param: itemId - id of node, if not defined tree super root used. |
2529
|
|
|
* @type: public |
2530
|
|
|
* @topic: 6 |
2531
|
|
|
*/ |
2532
|
|
|
dhtmlXTreeObject.prototype.refreshItem=function(itemId){ |
2533
|
|
|
if (!itemId) itemId=this.rootId; |
2534
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2535
|
|
|
this.deleteChildItems(itemId); |
2536
|
|
|
this._loadDynXML(itemId); |
2537
|
|
|
}; |
2538
|
|
|
|
2539
|
|
|
/** |
2540
|
|
|
* @desc: set item images |
2541
|
|
|
* @param: itemId - id of node |
2542
|
|
|
* @param: image1 - node without children icon |
2543
|
|
|
* @param: image2 - closed node icon |
2544
|
|
|
* @param: image3 - open node icon |
2545
|
|
|
* @type: public |
2546
|
|
|
* @topic: 6 |
2547
|
|
|
*/ |
2548
|
|
|
dhtmlXTreeObject.prototype.setItemImage2=function(itemId, image1,image2,image3){ |
2549
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2550
|
|
|
if (!temp) return 0; |
2551
|
|
|
temp.images[1]=image2; |
2552
|
|
|
temp.images[2]=image3; |
2553
|
|
|
temp.images[0]=image1; |
2554
|
|
|
this._correctPlus(temp); |
2555
|
|
|
}; |
2556
|
|
|
/** |
2557
|
|
|
* @desc: set item icons (mostly usefull for childless nodes) |
2558
|
|
|
* @param: itemId - id of node |
2559
|
|
|
* @param: image1 - node without children icon or closed node icon (if image2 specified) |
2560
|
|
|
* @param: image2 - open node icon (optional) |
2561
|
|
|
* @type: public |
2562
|
|
|
* @topic: 6 |
2563
|
|
|
*/ |
2564
|
|
|
dhtmlXTreeObject.prototype.setItemImage=function(itemId,image1,image2) |
2565
|
|
|
{ |
2566
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2567
|
|
|
if (!temp) return 0; |
2568
|
|
|
if (image2) |
2569
|
|
|
{ |
2570
|
|
|
temp.images[1]=image1; |
2571
|
|
|
temp.images[2]=image2; |
2572
|
|
|
} |
2573
|
|
|
else temp.images[0]=image1; |
2574
|
|
|
this._correctPlus(temp); |
2575
|
|
|
}; |
2576
|
|
|
|
2577
|
|
|
|
2578
|
|
|
/** |
2579
|
|
|
* @desc: Returns the list of all subitems Ids from the next level of tree, separated by commas. |
2580
|
|
|
* @param: itemId - id of node |
2581
|
|
|
* @type: public |
2582
|
|
|
* @return: list of all subitems from the next level of tree, separated by commas. |
2583
|
|
|
* @topic: 6 |
2584
|
|
|
*/ |
2585
|
|
|
dhtmlXTreeObject.prototype.getSubItems =function(itemId) |
2586
|
|
|
{ |
2587
|
|
|
var temp=this._globalIdStorageFind(itemId,0,1); |
2588
|
|
|
if (!temp) return 0; |
2589
|
|
|
|
2590
|
|
|
var z=""; |
2591
|
|
|
for (i=0; i<temp.childsCount; i++){ |
2592
|
|
|
if (!z) z= ""+temp.childNodes[i].id; |
2593
|
|
|
else z+=this.dlmtr+temp.childNodes[i].id; |
2594
|
|
|
|
2595
|
|
|
} |
2596
|
|
|
|
2597
|
|
|
return z; |
2598
|
|
|
}; |
2599
|
|
|
|
2600
|
|
|
|
2601
|
|
|
|
2602
|
|
|
|
2603
|
|
|
/** |
2604
|
|
|
* @desc: Returns the list of all sub items from all next levels of tree, separated by commas. |
2605
|
|
|
* @param: itemId - id of node |
2606
|
|
|
* @edition: Professional |
2607
|
|
|
* @type: private |
2608
|
|
|
* @topic: 6 |
2609
|
|
|
*/ |
2610
|
|
View Code Duplication |
dhtmlXTreeObject.prototype._getAllScraggyItems =function(node) |
2611
|
|
|
{ |
2612
|
|
|
var z=""; |
2613
|
|
|
for (var i=0; i<node.childsCount; i++) |
2614
|
|
|
{ |
2615
|
|
|
if ((node.childNodes[i].unParsed)||(node.childNodes[i].childsCount>0)) |
2616
|
|
|
{ |
2617
|
|
|
if (node.childNodes[i].unParsed) |
2618
|
|
|
var zb=this._getAllScraggyItemsXML(node.childNodes[i].unParsed,1); |
2619
|
|
|
else |
2620
|
|
|
var zb=this._getAllScraggyItems(node.childNodes[i]) |
2621
|
|
|
|
2622
|
|
|
if (zb) |
2623
|
|
|
if (z) z+=this.dlmtr+zb; |
2624
|
|
|
else z=zb; |
2625
|
|
|
} |
2626
|
|
|
else |
2627
|
|
|
if (!z) z=""+node.childNodes[i].id; |
2628
|
|
|
else z+=this.dlmtr+node.childNodes[i].id; |
2629
|
|
|
} |
2630
|
|
|
return z; |
2631
|
|
|
}; |
2632
|
|
|
|
2633
|
|
|
|
2634
|
|
|
|
2635
|
|
|
|
2636
|
|
|
|
2637
|
|
|
/** |
2638
|
|
|
* @desc: Returns the list of all children items from all next levels of tree, separated by commas. |
2639
|
|
|
* @param: itemId - id of node |
2640
|
|
|
* @type: private |
2641
|
|
|
* @edition: Professional |
2642
|
|
|
* @topic: 6 |
2643
|
|
|
*/ |
2644
|
|
|
|
2645
|
|
View Code Duplication |
dhtmlXTreeObject.prototype._getAllFatItems =function(node) |
2646
|
|
|
{ |
2647
|
|
|
var z=""; |
2648
|
|
|
for (var i=0; i<node.childsCount; i++) |
2649
|
|
|
{ |
2650
|
|
|
if ((node.childNodes[i].unParsed)||(node.childNodes[i].childsCount>0)) |
2651
|
|
|
{ |
2652
|
|
|
if (!z) z=""+node.childNodes[i].id; |
2653
|
|
|
else z+=this.dlmtr+node.childNodes[i].id; |
2654
|
|
|
|
2655
|
|
|
if (node.childNodes[i].unParsed) |
2656
|
|
|
var zb=this._getAllFatItemsXML(node.childNodes[i].unParsed,1); |
2657
|
|
|
else |
2658
|
|
|
var zb=this._getAllFatItems(node.childNodes[i]) |
2659
|
|
|
|
2660
|
|
|
if (zb) z+=this.dlmtr+zb; |
2661
|
|
|
} |
2662
|
|
|
} |
2663
|
|
|
return z; |
2664
|
|
|
}; |
2665
|
|
|
|
2666
|
|
|
|
2667
|
|
|
/** |
2668
|
|
|
* @desc: Returns the list of all children items from all next levels of tree, separated by commas. |
2669
|
|
|
* @param: itemId - id of node |
2670
|
|
|
* @type: private |
2671
|
|
|
* @topic: 6 |
2672
|
|
|
*/ |
2673
|
|
|
dhtmlXTreeObject.prototype._getAllSubItems =function(itemId,z,node) |
2674
|
|
|
{ |
2675
|
|
|
if (node) temp=node; |
2676
|
|
|
else { |
2677
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2678
|
|
|
}; |
2679
|
|
|
if (!temp) return 0; |
2680
|
|
|
|
2681
|
|
|
z=""; |
2682
|
|
|
for (var i=0; i<temp.childsCount; i++) |
2683
|
|
|
{ |
2684
|
|
|
if (!z) z=""+temp.childNodes[i].id; |
2685
|
|
|
else z+=this.dlmtr+temp.childNodes[i].id; |
2686
|
|
|
var zb=this._getAllSubItems(0,z,temp.childNodes[i]) |
2687
|
|
|
|
2688
|
|
|
if (zb) z+=this.dlmtr+zb; |
2689
|
|
|
} |
2690
|
|
|
|
2691
|
|
|
|
2692
|
|
|
return z; |
2693
|
|
|
}; |
2694
|
|
|
|
2695
|
|
|
|
2696
|
|
|
|
2697
|
|
|
|
2698
|
|
|
|
2699
|
|
|
/** |
2700
|
|
|
* @desc: select node ( and optionaly fire onselect event) |
2701
|
|
|
* @type: public |
2702
|
|
|
* @param: itemId - node id |
2703
|
|
|
* @param: mode - If true, script function for selected node will be called. |
2704
|
|
|
* @param: preserve - preserve earlier selected nodes |
2705
|
|
|
* @topic: 1 |
2706
|
|
|
*/ |
2707
|
|
|
dhtmlXTreeObject.prototype.selectItem=function(itemId,mode,preserve){ |
2708
|
|
|
mode=convertStringToBoolean(mode); |
2709
|
|
|
var temp=this._globalIdStorageFind(itemId); |
2710
|
|
|
if ((!temp)||(!temp.parentObject)) return 0; |
2711
|
|
|
|
2712
|
|
|
if (this.XMLloadingWarning) |
2713
|
|
|
temp.parentObject.openMe=1; |
2714
|
|
|
else |
2715
|
|
|
this._openItem(temp.parentObject); |
2716
|
|
|
|
2717
|
|
|
//temp.onRowSelect(0,temp.htmlNode.childNodes[0].childNodes[0].childNodes[3],mode); |
2718
|
|
|
var ze=null; |
2719
|
|
|
if (preserve) { |
2720
|
|
|
ze=new Object; ze.ctrlKey=true; |
2721
|
|
|
if (temp.i_sel) ze.skipUnSel=true; |
2722
|
|
|
} |
2723
|
|
|
if (mode) |
2724
|
|
|
this.onRowSelect(ze,temp.htmlNode.childNodes[0].childNodes[0].childNodes[3],false); |
2725
|
|
|
else |
2726
|
|
|
this.onRowSelect(ze,temp.htmlNode.childNodes[0].childNodes[0].childNodes[3],true); |
2727
|
|
|
}; |
2728
|
|
|
|
2729
|
|
|
/** |
2730
|
|
|
* @desc: retun selected node text |
2731
|
|
|
* @type: public |
2732
|
|
|
* @return: text of selected node (or list of all selected nodes text if more than one selected) |
2733
|
|
|
* @topic: 1 |
2734
|
|
|
*/ |
2735
|
|
|
dhtmlXTreeObject.prototype.getSelectedItemText=function() |
2736
|
|
|
{ |
2737
|
|
|
var str=new Array(); |
2738
|
|
|
for (var i=0; i<this._selected.length; i++) str[i]=this._selected[i].span.innerHTML; |
2739
|
|
|
return (str.join(this.dlmtr)); |
2740
|
|
|
}; |
2741
|
|
|
|
2742
|
|
|
|
2743
|
|
|
|
2744
|
|
|
|
2745
|
|
|
/** |
2746
|
|
|
* @desc: correct childNode list after node deleting |
2747
|
|
|
* @type: private |
2748
|
|
|
* @param: Count - childNodes collection length |
2749
|
|
|
* @param: Nodes - childNodes collection |
2750
|
|
|
* @topic: 4 |
2751
|
|
|
*/ |
2752
|
|
|
dhtmlXTreeObject.prototype._compressChildList=function(Count,Nodes) |
2753
|
|
|
{ |
2754
|
|
|
Count--; |
2755
|
|
|
for (var i=0; i<Count; i++) |
2756
|
|
|
{ |
2757
|
|
|
if (Nodes[i]==0) { Nodes[i]=Nodes[i+1]; Nodes[i+1]=0;} |
2758
|
|
|
}; |
2759
|
|
|
}; |
2760
|
|
|
/** |
2761
|
|
|
* @desc: delete node |
2762
|
|
|
* @type: private |
2763
|
|
|
* @param: itemId - target node id |
2764
|
|
|
* @param: htmlObject - target node object |
2765
|
|
|
* @param: skip - node unregistration mode (optional, used by private methods) |
2766
|
|
|
* @topic: 2 |
2767
|
|
|
*/ |
2768
|
|
|
dhtmlXTreeObject.prototype._deleteNode=function(itemId,htmlObject,skip){ |
2769
|
|
|
if ((!htmlObject)||(!htmlObject.parentObject)) return 0; |
2770
|
|
|
var tempos=0; var tempos2=0; |
2771
|
|
|
if (htmlObject.tr.nextSibling) tempos=htmlObject.tr.nextSibling.nodem; |
2772
|
|
|
if (htmlObject.tr.previousSibling) tempos2=htmlObject.tr.previousSibling.nodem; |
2773
|
|
|
|
2774
|
|
|
var sN=htmlObject.parentObject; |
2775
|
|
|
var Count=sN.childsCount; |
2776
|
|
|
var Nodes=sN.childNodes; |
2777
|
|
|
for (var i=0; i<Count; i++) |
2778
|
|
|
{ |
2779
|
|
|
if (Nodes[i].id==itemId) { |
2780
|
|
|
if (!skip) sN.htmlNode.childNodes[0].removeChild(Nodes[i].tr); |
2781
|
|
|
Nodes[i]=0; |
2782
|
|
|
break; |
2783
|
|
|
} |
2784
|
|
|
} |
2785
|
|
|
this._compressChildList(Count,Nodes); |
2786
|
|
|
if (!skip) { |
2787
|
|
|
sN.childsCount--; |
2788
|
|
|
} |
2789
|
|
|
|
2790
|
|
|
if (tempos) { |
2791
|
|
|
this._correctPlus(tempos); |
2792
|
|
|
this._correctLine(tempos); |
2793
|
|
|
} |
2794
|
|
|
if (tempos2) { |
2795
|
|
|
this._correctPlus(tempos2); |
2796
|
|
|
this._correctLine(tempos2); |
2797
|
|
|
} |
2798
|
|
|
if (this.tscheck) this._correctCheckStates(sN); |
2799
|
|
|
|
2800
|
|
|
if (!skip) { |
2801
|
|
|
this._globalIdStorageRecSub(htmlObject); |
2802
|
|
|
} |
2803
|
|
|
}; |
2804
|
|
|
/** |
2805
|
|
|
* @desc: set state of node's checkbox |
2806
|
|
|
* @type: public |
2807
|
|
|
* @param: itemId - target node id |
2808
|
|
|
* @param: state - checkbox state (0/1/"unsure") |
2809
|
|
|
* @topic: 5 |
2810
|
|
|
*/ |
2811
|
|
|
dhtmlXTreeObject.prototype.setCheck=function(itemId,state){ |
2812
|
|
|
var sNode=this._globalIdStorageFind(itemId,0,1); |
2813
|
|
|
if (!sNode) return; |
2814
|
|
|
|
2815
|
|
|
if (state==="unsure") |
2816
|
|
|
this._setCheck(sNode,state); |
2817
|
|
|
else |
2818
|
|
|
{ |
2819
|
|
|
state=convertStringToBoolean(state); |
2820
|
|
|
if ((this.tscheck)&&(this.smcheck)) this._setSubChecked(state,sNode); |
2821
|
|
|
else this._setCheck(sNode,state); |
2822
|
|
|
} |
2823
|
|
|
if (this.smcheck) |
2824
|
|
|
this._correctCheckStates(sNode.parentObject); |
2825
|
|
|
}; |
2826
|
|
|
|
2827
|
|
|
dhtmlXTreeObject.prototype._setCheck=function(sNode,state){ |
2828
|
|
|
if (!sNode) return; |
2829
|
|
|
if (((sNode.parentObject._r_logic)||(this._frbtr))&&(state)) |
2830
|
|
|
if (this._frbtrs){ |
2831
|
|
|
if (this._frbtrL) this.setCheck(this._frbtrL.id,0); |
2832
|
|
|
this._frbtrL=sNode; |
2833
|
|
|
} else |
2834
|
|
|
for (var i=0; i<sNode.parentObject.childsCount; i++) |
2835
|
|
|
this._setCheck(sNode.parentObject.childNodes[i],0); |
2836
|
|
|
|
2837
|
|
|
var z=sNode.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0]; |
2838
|
|
|
|
2839
|
|
|
if (state=="unsure") sNode.checkstate=2; |
2840
|
|
|
else if (state) sNode.checkstate=1; else sNode.checkstate=0; |
2841
|
|
|
if (sNode.dscheck) sNode.checkstate=sNode.dscheck; |
2842
|
|
|
this._setSrc(z,this.imPath+((sNode.parentObject._r_logic||this._frbtr)?this.radioArray:this.checkArray)[sNode.checkstate]); |
2843
|
|
|
}; |
2844
|
|
|
|
2845
|
|
|
/** |
2846
|
|
|
* @desc: change state of node's checkbox and all children checkboxes |
2847
|
|
|
* @type: public |
2848
|
|
|
* @param: itemId - target node id |
2849
|
|
|
* @param: state - checkbox state |
2850
|
|
|
* @topic: 5 |
2851
|
|
|
*/ |
2852
|
|
|
dhtmlXTreeObject.prototype.setSubChecked=function(itemId,state){ |
2853
|
|
|
var sNode=this._globalIdStorageFind(itemId); |
2854
|
|
|
this._setSubChecked(state,sNode); |
2855
|
|
|
this._correctCheckStates(sNode.parentObject); |
2856
|
|
|
} |
2857
|
|
|
|
2858
|
|
|
|
2859
|
|
|
|
2860
|
|
|
/** |
2861
|
|
|
* @desc: change state of node's checkbox and all childnodes checkboxes |
2862
|
|
|
* @type: private |
2863
|
|
|
* @param: itemId - target node id |
2864
|
|
|
* @param: state - checkbox state |
2865
|
|
|
* @param: sNode - target node object (optional, used by private methods) |
2866
|
|
|
* @topic: 5 |
2867
|
|
|
*/ |
2868
|
|
|
dhtmlXTreeObject.prototype._setSubChecked=function(state,sNode){ |
2869
|
|
|
state=convertStringToBoolean(state); |
2870
|
|
|
if (!sNode) return; |
2871
|
|
|
if (((sNode.parentObject._r_logic)||(this._frbtr))&&(state)) |
2872
|
|
|
for (var i=0; i<sNode.parentObject.childsCount; i++) |
2873
|
|
|
this._setSubChecked(0,sNode.parentObject.childNodes[i]); |
2874
|
|
|
|
2875
|
|
|
|
2876
|
|
|
if (sNode._r_logic||this._frbtr) |
2877
|
|
|
this._setSubChecked(state,sNode.childNodes[0]); |
2878
|
|
|
else |
2879
|
|
|
for (var i=0; i<sNode.childsCount; i++) |
2880
|
|
|
{ |
2881
|
|
|
this._setSubChecked(state,sNode.childNodes[i]); |
2882
|
|
|
}; |
2883
|
|
|
var z=sNode.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0]; |
2884
|
|
|
|
2885
|
|
|
if (state) sNode.checkstate=1; |
2886
|
|
|
else sNode.checkstate=0; |
2887
|
|
|
if (sNode.dscheck) sNode.checkstate=sNode.dscheck; |
2888
|
|
|
|
2889
|
|
|
|
2890
|
|
|
|
2891
|
|
|
this._setSrc(z,this.imPath+((sNode.parentObject._r_logic||this._frbtr)?this.radioArray:this.checkArray)[sNode.checkstate]); |
2892
|
|
|
}; |
2893
|
|
|
|
2894
|
|
|
/** |
2895
|
|
|
* @desc: get state of nodes's checkbox |
2896
|
|
|
* @type: public |
2897
|
|
|
* @param: itemId - target node id |
2898
|
|
|
* @return: node state (0 - unchecked,1 - checked, 2 - third state) |
2899
|
|
|
* @topic: 5 |
2900
|
|
|
*/ |
2901
|
|
|
dhtmlXTreeObject.prototype.isItemChecked=function(itemId){ |
2902
|
|
|
var sNode=this._globalIdStorageFind(itemId); |
2903
|
|
|
if (!sNode) return; |
|
|
|
|
2904
|
|
|
return sNode.checkstate; |
2905
|
|
|
}; |
2906
|
|
|
|
2907
|
|
|
|
2908
|
|
|
|
2909
|
|
|
|
2910
|
|
|
|
2911
|
|
|
|
2912
|
|
|
|
2913
|
|
|
/** |
2914
|
|
|
* @desc: delete all children of node |
2915
|
|
|
* @type: public |
2916
|
|
|
* @param: itemId - node id |
2917
|
|
|
* @topic: 2 |
2918
|
|
|
*/ |
2919
|
|
|
dhtmlXTreeObject.prototype.deleteChildItems=function(itemId) |
2920
|
|
|
{ |
2921
|
|
|
var sNode=this._globalIdStorageFind(itemId); |
2922
|
|
|
if (!sNode) return; |
2923
|
|
|
var j=sNode.childsCount; |
2924
|
|
|
for (var i=0; i<j; i++) |
2925
|
|
|
{ |
2926
|
|
|
this._deleteNode(sNode.childNodes[0].id,sNode.childNodes[0]); |
2927
|
|
|
}; |
2928
|
|
|
}; |
2929
|
|
|
|
2930
|
|
|
/** |
2931
|
|
|
* @desc: delete node |
2932
|
|
|
* @type: public |
2933
|
|
|
* @param: itemId - node id |
2934
|
|
|
* @param: selectParent - If true parent of deleted item get selection, else no selected items leaving in tree. |
2935
|
|
|
* @topic: 2 |
2936
|
|
|
*/ |
2937
|
|
|
dhtmlXTreeObject.prototype.deleteItem=function(itemId,selectParent){ |
2938
|
|
|
if ((!this._onrdlh)||(this._onrdlh(itemId))){ |
2939
|
|
|
var z=this._deleteItem(itemId,selectParent); |
2940
|
|
|
|
2941
|
|
|
} |
2942
|
|
|
|
2943
|
|
|
//nb:solves standard doctype prb in IE |
2944
|
|
|
this.allTree.childNodes[0].border = "1"; |
2945
|
|
|
this.allTree.childNodes[0].border = "0"; |
2946
|
|
|
} |
2947
|
|
|
/** |
2948
|
|
|
* @desc: delete node |
2949
|
|
|
* @type: private |
2950
|
|
|
* @param: id - node id |
2951
|
|
|
* @param: selectParent - If true parent of deleted item get selection, else no selected items leaving in tree. |
2952
|
|
|
* @param: skip - unregistering mode (optional, used by private methods) |
2953
|
|
|
* @topic: 2 |
2954
|
|
|
*/ |
2955
|
|
|
dhtmlXTreeObject.prototype._deleteItem=function(itemId,selectParent,skip){ |
2956
|
|
|
selectParent=convertStringToBoolean(selectParent); |
2957
|
|
|
var sNode=this._globalIdStorageFind(itemId); |
2958
|
|
|
if (!sNode) return; |
|
|
|
|
2959
|
|
|
var pid=this.getParentId(itemId); |
2960
|
|
|
|
2961
|
|
|
var zTemp=sNode.parentObject; |
2962
|
|
|
this._deleteNode(itemId,sNode,skip); |
2963
|
|
|
if(this._editCell&&this._editCell.id==itemId) |
2964
|
|
|
this._editCell = null; |
2965
|
|
|
this._correctPlus(zTemp); |
2966
|
|
|
this._correctLine(zTemp); |
2967
|
|
|
|
2968
|
|
|
if ((selectParent)&&(pid!=this.rootId)) this.selectItem(pid,1); |
2969
|
|
|
return zTemp; |
2970
|
|
|
}; |
2971
|
|
|
|
2972
|
|
|
/** |
2973
|
|
|
* @desc: uregister all child nodes of target node |
2974
|
|
|
* @type: private |
2975
|
|
|
* @param: itemObject - node object |
2976
|
|
|
* @topic: 3 |
2977
|
|
|
*/ |
2978
|
|
|
dhtmlXTreeObject.prototype._globalIdStorageRecSub=function(itemObject){ |
2979
|
|
|
for(var i=0; i<itemObject.childsCount; i++) |
2980
|
|
|
{ |
2981
|
|
|
this._globalIdStorageRecSub(itemObject.childNodes[i]); |
2982
|
|
|
this._globalIdStorageSub(itemObject.childNodes[i].id); |
2983
|
|
|
}; |
2984
|
|
|
this._globalIdStorageSub(itemObject.id); |
2985
|
|
|
|
2986
|
|
|
/*anti memory leaking*/ |
2987
|
|
|
var z=itemObject; |
2988
|
|
|
// var par=z.span.parentNode.parentNode.childNodes; |
2989
|
|
|
// par[0].parentObject=null; |
2990
|
|
|
// par[1].childNodes[0].parentObject=null; |
2991
|
|
|
// par[2].childNodes[0].parentObject=null; |
2992
|
|
|
// par[2].childNodes[0].treeNod=null; |
2993
|
|
|
// par[2].parentObject=null; |
2994
|
|
|
// par[3].parentObject=null; |
2995
|
|
|
z.span=null; |
2996
|
|
|
z.tr.nodem=null; |
2997
|
|
|
z.tr=null; |
2998
|
|
|
z.htmlNode=null; |
2999
|
|
|
}; |
3000
|
|
|
|
3001
|
|
|
/** |
3002
|
|
|
* @desc: create new node next to specified |
3003
|
|
|
* @type: public |
3004
|
|
|
* @param: itemId - node id |
3005
|
|
|
* @param: newItemId - new node id |
3006
|
|
|
* @param: itemText - new node text |
3007
|
|
|
* @param: itemActionHandler - function fired on node select event (optional) |
3008
|
|
|
* @param: image1 - image for node without children; (optional) |
3009
|
|
|
* @param: image2 - image for closed node; (optional) |
3010
|
|
|
* @param: image3 - image for opened node (optional) |
3011
|
|
|
* @param: optionStr - options string (optional) |
3012
|
|
|
* @param: children - node children flag (for dynamical trees) (optional) |
3013
|
|
|
* @topic: 2 |
3014
|
|
|
*/ |
3015
|
|
|
dhtmlXTreeObject.prototype.insertNewNext=function(itemId,newItemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children){ |
3016
|
|
|
var sNode=this._globalIdStorageFind(itemId); |
3017
|
|
|
if ((!sNode)||(!sNode.parentObject)) return (0); |
3018
|
|
|
|
3019
|
|
|
var nodez=this._attachChildNode(0,newItemId,itemText,itemActionHandler,image1,image2,image3,optionStr,children,sNode); |
3020
|
|
|
|
3021
|
|
|
return nodez; |
3022
|
|
|
}; |
3023
|
|
|
|
3024
|
|
|
|
3025
|
|
|
|
3026
|
|
|
/** |
3027
|
|
|
* @desc: retun node id by index |
3028
|
|
|
* @type: public |
3029
|
|
|
* @param: itemId - parent node id |
3030
|
|
|
* @param: index - index of node, 0 based |
3031
|
|
|
* @return: node id |
3032
|
|
|
* @topic: 1 |
3033
|
|
|
*/ |
3034
|
|
|
dhtmlXTreeObject.prototype.getItemIdByIndex=function(itemId,index){ |
3035
|
|
|
var z=this._globalIdStorageFind(itemId); |
3036
|
|
|
if ((!z)||(index>=z.childsCount)) return null; |
3037
|
|
|
return z.childNodes[index].id; |
3038
|
|
|
}; |
3039
|
|
|
|
3040
|
|
|
/** |
3041
|
|
|
* @desc: retun child node id by index |
3042
|
|
|
* @type: public |
3043
|
|
|
* @param: itemId - parent node id |
3044
|
|
|
* @param: index - index of child node |
3045
|
|
|
* @return: node id |
3046
|
|
|
* @topic: 1 |
3047
|
|
|
*/ |
3048
|
|
|
dhtmlXTreeObject.prototype.getChildItemIdByIndex=function(itemId,index){ |
3049
|
|
|
var z=this._globalIdStorageFind(itemId); |
3050
|
|
|
if ((!z)||(index>=z.childsCount)) return null; |
3051
|
|
|
return z.childNodes[index].id; |
3052
|
|
|
}; |
3053
|
|
|
|
3054
|
|
|
|
3055
|
|
|
|
3056
|
|
|
|
3057
|
|
|
|
3058
|
|
|
/** |
3059
|
|
|
* @desc: set function called when drag-and-drop event occured |
3060
|
|
|
* @param: aFunc - event handling function |
3061
|
|
|
* @type: deprecated |
3062
|
|
|
* @topic: 0,7 |
3063
|
|
|
* @event: onDrag |
3064
|
|
|
* @depricated: use grid.attachEvent("onDrag",func); instead |
3065
|
|
|
* @eventdesc: Event occured after item was dragged and droped on another item, but before item moving processed. |
3066
|
|
|
Event also raised while programmatic moving nodes. |
3067
|
|
|
* @eventparam: ID of source item |
3068
|
|
|
* @eventparam: ID of target item |
3069
|
|
|
* @eventparam: if node droped as sibling then contain id of item before whitch source node will be inserted |
3070
|
|
|
* @eventparam: source Tree object |
3071
|
|
|
* @eventparam: target Tree object |
3072
|
|
|
* @eventreturn: true - confirm drag-and-drop; false - deny drag-and-drop; |
3073
|
|
|
*/ |
3074
|
|
|
dhtmlXTreeObject.prototype.setDragHandler=function(func){ this.attachEvent("onDrag",func); }; |
3075
|
|
|
|
3076
|
|
|
/** |
3077
|
|
|
* @desc: clear selection from node |
3078
|
|
|
* @param: htmlNode - pointer to node object |
3079
|
|
|
* @type: private |
3080
|
|
|
* @topic: 1 |
3081
|
|
|
*/ |
3082
|
|
|
dhtmlXTreeObject.prototype._clearMove=function(){ |
3083
|
|
|
if (this._lastMark){ |
3084
|
|
|
this._lastMark.className=this._lastMark.className.replace(/dragAndDropRow/g,""); |
3085
|
|
|
this._lastMark=null; |
3086
|
|
|
} |
3087
|
|
|
|
3088
|
|
|
this.allTree.className=this.allTree.className.replace(" selectionBox",""); |
3089
|
|
|
}; |
3090
|
|
|
|
3091
|
|
|
/** |
3092
|
|
|
* @desc: enable/disable drag-and-drop |
3093
|
|
|
* @type: public |
3094
|
|
|
* @param: mode - enabled/disabled [ can be true/false/temporary_disabled - last value mean that tree can be D-n-D can be switched to true later ] |
3095
|
|
|
* @param: rmode - enabled/disabled drag and drop on super root |
3096
|
|
|
* @topic: 0 |
3097
|
|
|
*/ |
3098
|
|
|
dhtmlXTreeObject.prototype.enableDragAndDrop=function(mode,rmode){ |
3099
|
|
|
if (mode=="temporary_disabled"){ |
3100
|
|
|
this.dADTempOff=false; |
3101
|
|
|
mode=true; } |
3102
|
|
|
else |
3103
|
|
|
this.dADTempOff=true; |
3104
|
|
|
|
3105
|
|
|
this.dragAndDropOff=convertStringToBoolean(mode); |
3106
|
|
|
if (this.dragAndDropOff) this.dragger.addDragLanding(this.allTree,this); |
3107
|
|
|
if (arguments.length>1) |
3108
|
|
|
this._ddronr=(!convertStringToBoolean(rmode)); |
3109
|
|
|
}; |
3110
|
|
|
|
3111
|
|
|
/** |
3112
|
|
|
* @desc: set selection on node |
3113
|
|
|
* @param: node - pointer to node object |
3114
|
|
|
* @type: private |
3115
|
|
|
* @topic: 1 |
3116
|
|
|
*/ |
3117
|
|
|
dhtmlXTreeObject.prototype._setMove=function(htmlNode,x,y){ |
3118
|
|
|
if (htmlNode.parentObject.span) { |
3119
|
|
|
//window.status=x; |
3120
|
|
|
var a1=getAbsoluteTop(htmlNode); |
3121
|
|
|
var a2=getAbsoluteTop(this.allTree)-this.allTree.scrollTop; |
3122
|
|
|
|
3123
|
|
|
this.dadmodec=this.dadmode;//this.dadmode; |
3124
|
|
|
this.dadmodefix=0; |
3125
|
|
|
|
3126
|
|
|
|
3127
|
|
|
var zN=htmlNode.parentObject.span; |
3128
|
|
|
zN.className+=" dragAndDropRow"; |
3129
|
|
|
this._lastMark=zN; |
3130
|
|
|
|
3131
|
|
|
this._autoScroll(null,a1,a2); |
3132
|
|
|
|
3133
|
|
|
} |
3134
|
|
|
}; |
3135
|
|
|
|
3136
|
|
View Code Duplication |
dhtmlXTreeObject.prototype._autoScroll=function(node,a1,a2){ |
3137
|
|
|
if (this.autoScroll) |
3138
|
|
|
{ |
3139
|
|
|
if (node){ |
3140
|
|
|
a1=getAbsoluteTop(node); |
3141
|
|
|
a2=getAbsoluteTop(this.allTree)-this.allTree.scrollTop; |
3142
|
|
|
} |
3143
|
|
|
//scroll down |
3144
|
|
|
if ( (a1-a2-parseInt(this.allTree.scrollTop))>(parseInt(this.allTree.offsetHeight)-50) ) |
3145
|
|
|
this.allTree.scrollTop=parseInt(this.allTree.scrollTop)+20; |
3146
|
|
|
//scroll top |
3147
|
|
|
if ( (a1-a2)<(parseInt(this.allTree.scrollTop)+30) ) |
3148
|
|
|
this.allTree.scrollTop=parseInt(this.allTree.scrollTop)-20; |
3149
|
|
|
} |
3150
|
|
|
} |
3151
|
|
|
|
3152
|
|
|
/** |
3153
|
|
|
* @desc: create html element for dragging |
3154
|
|
|
* @type: private |
3155
|
|
|
* @param: htmlObject - html node object |
3156
|
|
|
* @topic: 1 |
3157
|
|
|
*/ |
3158
|
|
|
dhtmlXTreeObject.prototype._createDragNode=function(htmlObject,e){ |
3159
|
|
|
if (!this.dADTempOff) return null; |
3160
|
|
|
|
3161
|
|
|
var obj=htmlObject.parentObject; |
3162
|
|
|
if (!this.callEvent("onBeforeDrag",[obj.id, e])) return null; |
3163
|
|
|
if (!obj.i_sel){ |
3164
|
|
|
|
3165
|
|
|
this._selectItem(obj,e); |
3166
|
|
|
} |
3167
|
|
|
|
3168
|
|
|
var dragSpan=document.createElement('div'); |
3169
|
|
|
|
3170
|
|
|
var text=new Array(); |
3171
|
|
|
if (this._itim_dg) |
3172
|
|
|
for (var i=0; i<this._selected.length; i++) |
3173
|
|
|
text[i]="<table cellspacing='0' cellpadding='0'><tr><td><img width='18px' height='18px' src='"+this._getSrc(this._selected[i].span.parentNode.previousSibling.childNodes[0])+"'></td><td>"+this._selected[i].span.innerHTML+"</td></tr></table>"; |
3174
|
|
|
else |
3175
|
|
|
text=this.getSelectedItemText().split(this.dlmtr); |
3176
|
|
|
|
3177
|
|
|
dragSpan.innerHTML=text.join(""); |
3178
|
|
|
dragSpan.style.position="absolute"; |
3179
|
|
|
dragSpan.className="dragSpanDiv"; |
3180
|
|
|
this._dragged=(new Array()).concat(this._selected); |
3181
|
|
|
return dragSpan; |
3182
|
|
|
} |
3183
|
|
|
|
3184
|
|
|
|
3185
|
|
|
|
3186
|
|
|
/** |
3187
|
|
|
* @desc: focus item in tree |
3188
|
|
|
* @type: private |
3189
|
|
|
* @param: item - node object |
3190
|
|
|
* @edition: Professional |
3191
|
|
|
* @topic: 0 |
3192
|
|
|
*/ |
3193
|
|
|
dhtmlXTreeObject.prototype._focusNode=function(item){ |
3194
|
|
|
var z=getAbsoluteTop(item.htmlNode)-getAbsoluteTop(this.allTree); |
3195
|
|
|
if ((z>(this.allTree.offsetHeight-30)) || (z<0)) |
3196
|
|
|
this.allTree.scrollTop=z+this.allTree.scrollTop; |
3197
|
|
|
}; |
3198
|
|
|
|
3199
|
|
|
|
3200
|
|
|
|
3201
|
|
|
|
3202
|
|
|
|
3203
|
|
|
|
3204
|
|
|
|
3205
|
|
|
|
3206
|
|
|
|
3207
|
|
|
|
3208
|
|
|
|
3209
|
|
|
|
3210
|
|
|
|
3211
|
|
|
///DragAndDrop |
3212
|
|
|
|
3213
|
|
|
dhtmlXTreeObject.prototype._preventNsDrag=function(e){ |
3214
|
|
|
if ((e)&&(e.preventDefault)) { e.preventDefault(); return false; } |
3215
|
|
|
return false; |
3216
|
|
|
} |
3217
|
|
|
|
3218
|
|
|
dhtmlXTreeObject.prototype._drag=function(sourceHtmlObject,dhtmlObject,targetHtmlObject){ |
3219
|
|
|
if (this._autoOpenTimer) clearTimeout(this._autoOpenTimer); |
3220
|
|
|
|
3221
|
|
|
if (!targetHtmlObject.parentObject){ |
3222
|
|
|
targetHtmlObject=this.htmlNode.htmlNode.childNodes[0].childNodes[0].childNodes[1].childNodes[0]; |
3223
|
|
|
this.dadmodec=0; |
3224
|
|
|
} |
3225
|
|
|
|
3226
|
|
|
this._clearMove(); |
3227
|
|
|
var z=sourceHtmlObject.parentObject.treeNod; |
3228
|
|
|
if ((z)&&(z._clearMove)) z._clearMove(""); |
3229
|
|
|
|
3230
|
|
|
if ((!this.dragMove)||(this.dragMove())) |
3231
|
|
|
{ |
3232
|
|
|
if ((!z)||(!z._clearMove)||(!z._dragged)) var col=new Array(sourceHtmlObject.parentObject); |
3233
|
|
|
else var col=z._dragged; |
3234
|
|
|
var trg=targetHtmlObject.parentObject; |
3235
|
|
|
|
3236
|
|
|
for (var i=0; i<col.length; i++){ |
3237
|
|
|
var newID=this._moveNode(col[i],trg); |
3238
|
|
|
if ((this.dadmodec)&&(newID!==false)) trg=this._globalIdStorageFind(newID,true,true); |
3239
|
|
|
if ((newID)&&(!this._sADnD)) this.selectItem(newID,0,1); |
3240
|
|
|
} |
3241
|
|
|
|
3242
|
|
|
} |
3243
|
|
|
if (z) z._dragged=new Array(); |
3244
|
|
|
|
3245
|
|
|
|
3246
|
|
|
} |
3247
|
|
|
|
3248
|
|
|
dhtmlXTreeObject.prototype._dragIn=function(htmlObject,shtmlObject,x,y){ |
3249
|
|
|
|
3250
|
|
|
if (!this.dADTempOff) return 0; |
3251
|
|
|
var fobj=shtmlObject.parentObject; |
3252
|
|
|
var tobj=htmlObject.parentObject; |
3253
|
|
|
if ((!tobj)&&(this._ddronr)) return; |
|
|
|
|
3254
|
|
|
if (!this.callEvent("onDragIn",[fobj.id,tobj?tobj.id:null,fobj.treeNod,this])){ |
3255
|
|
|
if (tobj) this._autoScroll(htmlObject); |
3256
|
|
|
return 0; |
3257
|
|
|
} |
3258
|
|
|
|
3259
|
|
|
|
3260
|
|
|
if (!tobj) |
3261
|
|
|
this.allTree.className+=" selectionBox"; |
3262
|
|
|
else |
3263
|
|
|
{ |
3264
|
|
|
if (fobj.childNodes==null){ |
3265
|
|
|
this._setMove(htmlObject,x,y); |
3266
|
|
|
return htmlObject; |
3267
|
|
|
} |
3268
|
|
|
|
3269
|
|
|
var stree=fobj.treeNod; |
3270
|
|
|
for (var i=0; i<stree._dragged.length; i++) |
3271
|
|
|
if (this._checkPNodes(tobj,stree._dragged[i])){ |
3272
|
|
|
this._autoScroll(htmlObject); |
3273
|
|
|
return 0; |
3274
|
|
|
} |
3275
|
|
|
|
3276
|
|
|
this._setMove(htmlObject,x,y); |
3277
|
|
|
if (this._getOpenState(tobj)<=0){ |
3278
|
|
|
this._autoOpenId=tobj.id; |
3279
|
|
|
this._autoOpenTimer=window.setTimeout(new callerFunction(this._autoOpenItem,this),1000); |
3280
|
|
|
} |
3281
|
|
|
} |
3282
|
|
|
|
3283
|
|
|
return htmlObject; |
3284
|
|
|
|
3285
|
|
|
} |
3286
|
|
|
dhtmlXTreeObject.prototype._autoOpenItem=function(e,treeObject){ |
3287
|
|
|
treeObject.openItem(treeObject._autoOpenId); |
3288
|
|
|
}; |
3289
|
|
|
dhtmlXTreeObject.prototype._dragOut=function(htmlObject){ |
3290
|
|
|
this._clearMove(); |
3291
|
|
|
if (this._autoOpenTimer) clearTimeout(this._autoOpenTimer); |
3292
|
|
|
} |
3293
|
|
|
|
3294
|
|
|
|
3295
|
|
|
|
3296
|
|
|
|
3297
|
|
|
|
3298
|
|
|
//#complex_move:01112006{ |
3299
|
|
|
|
3300
|
|
|
/** |
3301
|
|
|
* @desc: move item (inside of tree) |
3302
|
|
|
* @type: public |
3303
|
|
|
* @param: itemId - item Id |
3304
|
|
|
* @param: mode - moving mode (left,up,down,item_child,item_sibling,item_sibling_next,up_strict,down_strict) |
3305
|
|
|
* @param: targetId - target Node in item_child and item_sibling mode |
3306
|
|
|
* @param: targetTree - used for moving between trees (optional) |
3307
|
|
|
* @return: node id |
3308
|
|
|
* @topic: 2 |
3309
|
|
|
*/ |
3310
|
|
|
dhtmlXTreeObject.prototype.moveItem=function(itemId,mode,targetId,targetTree) |
3311
|
|
|
{ |
3312
|
|
|
var sNode=this._globalIdStorageFind(itemId); |
3313
|
|
|
if (!sNode) return (0); |
3314
|
|
|
var resultId = null; |
3315
|
|
|
switch(mode){ |
3316
|
|
|
case "right": |
3317
|
|
|
alert('Not supported yet'); |
|
|
|
|
3318
|
|
|
break; |
3319
|
|
|
case "item_child": |
3320
|
|
|
var tNode=(targetTree||this)._globalIdStorageFind(targetId); |
3321
|
|
|
if (!tNode) return (0); |
3322
|
|
|
resultId = (targetTree||this)._moveNodeTo(sNode,tNode,0); |
3323
|
|
|
break; |
3324
|
|
|
case "item_sibling": |
3325
|
|
|
var tNode=(targetTree||this)._globalIdStorageFind(targetId); |
3326
|
|
|
if (!tNode) return (0); |
3327
|
|
|
resultId = (targetTree||this)._moveNodeTo(sNode,tNode.parentObject,tNode); |
3328
|
|
|
break; |
3329
|
|
|
case "item_sibling_next": |
3330
|
|
|
var tNode=(targetTree||this)._globalIdStorageFind(targetId); |
3331
|
|
|
if (!tNode) return (0); |
3332
|
|
|
if ((tNode.tr)&&(tNode.tr.nextSibling)&&(tNode.tr.nextSibling.nodem)) |
3333
|
|
|
resultId = (targetTree||this)._moveNodeTo(sNode,tNode.parentObject,tNode.tr.nextSibling.nodem); |
3334
|
|
|
else |
3335
|
|
|
resultId = (targetTree||this)._moveNodeTo(sNode,tNode.parentObject); |
3336
|
|
|
break; |
3337
|
|
|
case "left": |
3338
|
|
|
if (sNode.parentObject.parentObject) |
3339
|
|
|
resultId = this._moveNodeTo(sNode,sNode.parentObject.parentObject,sNode.parentObject); |
3340
|
|
|
break; |
3341
|
|
|
case "up": |
3342
|
|
|
var z=this._getPrevNode(sNode); |
3343
|
|
|
if ((z==-1)||(!z.parentObject)) return null; |
3344
|
|
|
resultId = this._moveNodeTo(sNode,z.parentObject,z); |
3345
|
|
|
break; |
3346
|
|
|
case "up_strict": |
3347
|
|
|
var z=this._getIndex(sNode); |
3348
|
|
|
if (z!=0) |
3349
|
|
|
resultId = this._moveNodeTo(sNode,sNode.parentObject,sNode.parentObject.childNodes[z-1]); |
3350
|
|
|
break; |
3351
|
|
|
case "down_strict": |
3352
|
|
|
var z=this._getIndex(sNode); |
3353
|
|
|
var count=sNode.parentObject.childsCount-2; |
3354
|
|
|
if (z==count) |
3355
|
|
|
resultId = this._moveNodeTo(sNode,sNode.parentObject); |
3356
|
|
|
else if (z<count) |
3357
|
|
|
resultId = this._moveNodeTo(sNode,sNode.parentObject,sNode.parentObject.childNodes[z+2]); |
3358
|
|
|
break; |
3359
|
|
|
case "down": |
3360
|
|
|
var z=this._getNextNode(this._lastChild(sNode)); |
3361
|
|
|
if ((z==-1)||(!z.parentObject)) return; |
|
|
|
|
3362
|
|
|
if (z.parentObject==sNode.parentObject) |
3363
|
|
|
var z=this._getNextNode(z); |
3364
|
|
|
if (z==-1){ |
3365
|
|
|
resultId = this._moveNodeTo(sNode,sNode.parentObject); |
3366
|
|
|
} |
3367
|
|
|
else{ |
3368
|
|
|
if ((z==-1)||(!z.parentObject)) return; |
|
|
|
|
3369
|
|
|
resultId = this._moveNodeTo(sNode,z.parentObject,z); |
3370
|
|
|
} |
3371
|
|
|
break; |
3372
|
|
|
} |
3373
|
|
|
if (_isIE && _isIE<8){ |
3374
|
|
|
this.allTree.childNodes[0].border = "1"; |
3375
|
|
|
this.allTree.childNodes[0].border = "0"; |
3376
|
|
|
} |
3377
|
|
|
return resultId; |
3378
|
|
|
} |
3379
|
|
|
|
3380
|
|
|
|
3381
|
|
|
//#} |
3382
|
|
|
|
3383
|
|
|
|
3384
|
|
|
|
3385
|
|
|
|
3386
|
|
|
|
3387
|
|
|
|
3388
|
|
|
|
3389
|
|
|
/** |
3390
|
|
|
* @desc: load xml for tree branch |
3391
|
|
|
* @param: id - id of parent node |
3392
|
|
|
* @param: src - path to xml, optional |
3393
|
|
|
* @type: private |
3394
|
|
|
* @topic: 1 |
3395
|
|
|
*/ |
3396
|
|
|
dhtmlXTreeObject.prototype._loadDynXML=function(id,src) { |
3397
|
|
|
src=src||this.XMLsource; |
3398
|
|
|
var sn=(new Date()).valueOf(); |
3399
|
|
|
this._ld_id=id; |
3400
|
|
|
|
3401
|
|
|
this.loadXML(src+getUrlSymbol(src)+"uid="+sn+"&id="+this._escape(id)); |
3402
|
|
|
}; |
3403
|
|
|
|
3404
|
|
|
|
3405
|
|
|
|
3406
|
|
|
|
3407
|
|
|
|
3408
|
|
|
|
3409
|
|
|
|
3410
|
|
|
/** |
3411
|
|
|
* @desc: check possibility of drag-and-drop |
3412
|
|
|
* @type: private |
3413
|
|
|
* @param: itemId - draged node id |
3414
|
|
|
* @param: htmlObject - droped node object |
3415
|
|
|
* @param: shtmlObject - sourse node object |
3416
|
|
|
* @topic: 6 |
3417
|
|
|
*/ |
3418
|
|
|
dhtmlXTreeObject.prototype._checkPNodes=function(item1,item2){ |
3419
|
|
|
if (this._dcheckf) return false; |
3420
|
|
|
if (item2==item1) return 1 |
3421
|
|
|
if (item1.parentObject) return this._checkPNodes(item1.parentObject,item2); else return 0; |
|
|
|
|
3422
|
|
|
}; |
3423
|
|
|
dhtmlXTreeObject.prototype.disableDropCheck = function(mode){ |
3424
|
|
|
this._dcheckf = convertStringToBoolean(mode); |
3425
|
|
|
}; |
3426
|
|
|
|
3427
|
|
|
|
3428
|
|
|
|
3429
|
|
|
|
3430
|
|
|
|
3431
|
|
|
|
3432
|
|
|
|
3433
|
|
|
|
3434
|
|
|
|
3435
|
|
|
/** |
3436
|
|
|
* @desc: prevent caching in IE by adding random value to URL string |
3437
|
|
|
* @param: mode - enable/disable random value ( disabled by default ) |
3438
|
|
|
* @type: public |
3439
|
|
|
* @topic: 0 |
3440
|
|
|
*/ |
3441
|
|
|
dhtmlXTreeObject.prototype.preventIECaching=function(mode){ |
3442
|
|
|
this.no_cashe = convertStringToBoolean(mode); |
3443
|
|
|
this.XMLLoader.rSeed=this.no_cashe; |
3444
|
|
|
} |
3445
|
|
|
dhtmlXTreeObject.prototype.preventIECashing=dhtmlXTreeObject.prototype.preventIECaching; |
3446
|
|
|
|
3447
|
|
|
|
3448
|
|
|
|
3449
|
|
|
|
3450
|
|
|
|
3451
|
|
|
/** |
3452
|
|
|
* @desc: disable checkbox |
3453
|
|
|
* @param: itemId - Id of tree item |
3454
|
|
|
* @param: mode - 1 - on, 0 - off; |
3455
|
|
|
* @type: public |
3456
|
|
|
* @topic: 5 |
3457
|
|
|
*/ |
3458
|
|
|
dhtmlXTreeObject.prototype.disableCheckbox=function(itemId,mode) { |
3459
|
|
|
if (typeof(itemId)!="object") |
3460
|
|
|
var sNode=this._globalIdStorageFind(itemId,0,1); |
3461
|
|
|
else |
3462
|
|
|
var sNode=itemId; |
3463
|
|
|
if (!sNode) return; |
3464
|
|
|
sNode.dscheck=convertStringToBoolean(mode)?(((sNode.checkstate||0)%3)+3):((sNode.checkstate>2)?(sNode.checkstate-3):sNode.checkstate); |
3465
|
|
|
this._setCheck(sNode); |
3466
|
|
|
if (sNode.dscheck<3) sNode.dscheck=false; |
3467
|
|
|
}; |
3468
|
|
|
|
3469
|
|
|
|
3470
|
|
|
|
3471
|
|
|
|
3472
|
|
|
/** |
3473
|
|
|
* @desc: set escaping mode (used for escaping ID in requests) |
3474
|
|
|
* @param: mode - escaping mode ("utf8" for UTF escaping) |
3475
|
|
|
* @type: public |
3476
|
|
|
* @topic: 0 |
3477
|
|
|
*/ |
3478
|
|
|
dhtmlXTreeObject.prototype.setEscapingMode=function(mode){ |
3479
|
|
|
this.utfesc=mode; |
3480
|
|
|
} |
3481
|
|
|
|
3482
|
|
|
|
3483
|
|
|
/** |
3484
|
|
|
* @desc: enable item highlighting (item text highlited on mouseover) |
3485
|
|
|
* @beforeInit: 1 |
3486
|
|
|
* @param: mode - 1 - on, 0 - off; |
3487
|
|
|
* @type: public |
3488
|
|
|
* @topic: 0 |
3489
|
|
|
*/ |
3490
|
|
|
dhtmlXTreeObject.prototype.enableHighlighting=function(mode) { this.ehlt=true; this.ehlta=convertStringToBoolean(mode); }; |
3491
|
|
|
|
3492
|
|
|
/** |
3493
|
|
|
* @desc: called on mouse out |
3494
|
|
|
* @type: private |
3495
|
|
|
* @topic: 0 |
3496
|
|
|
*/ |
3497
|
|
|
dhtmlXTreeObject.prototype._itemMouseOut=function(){ |
3498
|
|
|
var that=this.childNodes[3].parentObject; |
3499
|
|
|
var tree=that.treeNod; |
3500
|
|
|
tree.callEvent("onMouseOut",[that.id]); |
3501
|
|
|
if (that.id==tree._l_onMSI) tree._l_onMSI=null; |
3502
|
|
|
if (!tree.ehlta) return; |
3503
|
|
|
that.span.className=that.span.className.replace("_lor",""); |
3504
|
|
|
} |
3505
|
|
|
/** |
3506
|
|
|
* @desc: called on mouse in |
3507
|
|
|
* @type: private |
3508
|
|
|
* @topic: 0 |
3509
|
|
|
*/ |
3510
|
|
|
dhtmlXTreeObject.prototype._itemMouseIn=function(){ |
3511
|
|
|
var that=this.childNodes[3].parentObject; |
3512
|
|
|
var tree=that.treeNod; |
3513
|
|
|
|
3514
|
|
|
if (tree._l_onMSI!=that.id) tree.callEvent("onMouseIn",[that.id]); |
3515
|
|
|
tree._l_onMSI=that.id; |
3516
|
|
|
if (!tree.ehlta) return; |
3517
|
|
|
that.span.className=that.span.className.replace("_lor",""); |
3518
|
|
|
that.span.className=that.span.className.replace(/((standart|selected)TreeRow)/,"$1_lor"); |
3519
|
|
|
} |
3520
|
|
|
|
3521
|
|
|
/** |
3522
|
|
|
* @desc: enable active images (clickable and dragable). By default only text part of the node is active |
3523
|
|
|
* @beforeInit: 1 |
3524
|
|
|
* @param: mode - 1 - on, 0 - off; |
3525
|
|
|
* @type: public |
3526
|
|
|
* @topic: 0 |
3527
|
|
|
*/ |
3528
|
|
|
dhtmlXTreeObject.prototype.enableActiveImages=function(mode){this._aimgs=convertStringToBoolean(mode); }; |
3529
|
|
|
|
3530
|
|
|
/** |
3531
|
|
|
* @desc: focus item in tree (scroll to it if necessary) |
3532
|
|
|
* @type: public |
3533
|
|
|
* @param: itemId - item Id |
3534
|
|
|
* @topic: 0 |
3535
|
|
|
*/ |
3536
|
|
|
dhtmlXTreeObject.prototype.focusItem=function(itemId){ |
3537
|
|
|
var sNode=this._globalIdStorageFind(itemId); |
3538
|
|
|
if (!sNode) return (0); |
3539
|
|
|
this._focusNode(sNode); |
3540
|
|
|
}; |
3541
|
|
|
|
3542
|
|
|
|
3543
|
|
|
/** |
3544
|
|
|
* @desc: Returns the list of all children from all next levels of tree, separated by default delimiter. |
3545
|
|
|
* @param: itemId - id of node |
3546
|
|
|
* @type: public |
3547
|
|
|
* @return: list of all children items from all next levels of tree, separated by default delimiter |
3548
|
|
|
* @topic: 6 |
3549
|
|
|
*/ |
3550
|
|
|
dhtmlXTreeObject.prototype.getAllSubItems =function(itemId){ |
3551
|
|
|
return this._getAllSubItems(itemId); |
3552
|
|
|
} |
3553
|
|
|
|
3554
|
|
|
/** |
3555
|
|
|
* @desc: Returns the list of all items which doesn't have child nodes. |
3556
|
|
|
* @type: public |
3557
|
|
|
* @return: list of all items which doesn't have child nodes. |
3558
|
|
|
* @topic: 6 |
3559
|
|
|
*/ |
3560
|
|
|
dhtmlXTreeObject.prototype.getAllChildless =function(){ |
3561
|
|
|
return this._getAllScraggyItems(this.htmlNode); |
3562
|
|
|
} |
3563
|
|
|
dhtmlXTreeObject.prototype.getAllLeafs=dhtmlXTreeObject.prototype.getAllChildless; |
3564
|
|
|
|
3565
|
|
|
|
3566
|
|
|
/** |
3567
|
|
|
* @desc: Returns the list of all children from all next levels of tree, separated by default delimiter. |
3568
|
|
|
* @param: itemId - id of node |
3569
|
|
|
* @edition: Professional |
3570
|
|
|
* @type: private |
3571
|
|
|
* @topic: 6 |
3572
|
|
|
*/ |
3573
|
|
View Code Duplication |
dhtmlXTreeObject.prototype._getAllScraggyItems =function(node) |
3574
|
|
|
{ |
3575
|
|
|
var z=""; |
3576
|
|
|
for (var i=0; i<node.childsCount; i++) |
3577
|
|
|
{ |
3578
|
|
|
if ((node.childNodes[i].unParsed)||(node.childNodes[i].childsCount>0)) |
3579
|
|
|
{ |
3580
|
|
|
if (node.childNodes[i].unParsed) |
3581
|
|
|
var zb=this._getAllScraggyItemsXML(node.childNodes[i].unParsed,1); |
3582
|
|
|
else |
3583
|
|
|
var zb=this._getAllScraggyItems(node.childNodes[i]) |
3584
|
|
|
|
3585
|
|
|
if (zb) |
3586
|
|
|
if (z) z+=this.dlmtr+zb; |
3587
|
|
|
else z=zb; |
3588
|
|
|
} |
3589
|
|
|
else |
3590
|
|
|
if (!z) z=""+node.childNodes[i].id; |
3591
|
|
|
else z+=this.dlmtr+node.childNodes[i].id; |
3592
|
|
|
} |
3593
|
|
|
return z; |
3594
|
|
|
}; |
3595
|
|
|
|
3596
|
|
|
|
3597
|
|
|
|
3598
|
|
|
|
3599
|
|
|
|
3600
|
|
|
/** |
3601
|
|
|
* @desc: Returns the list of all children from all next levels of tree, separated by default delimiter. |
3602
|
|
|
* @param: itemId - id of node |
3603
|
|
|
* @type: private |
3604
|
|
|
* @edition: Professional |
3605
|
|
|
* @topic: 6 |
3606
|
|
|
*/ |
3607
|
|
View Code Duplication |
dhtmlXTreeObject.prototype._getAllFatItems =function(node) |
3608
|
|
|
{ |
3609
|
|
|
var z=""; |
3610
|
|
|
for (var i=0; i<node.childsCount; i++) |
3611
|
|
|
{ |
3612
|
|
|
if ((node.childNodes[i].unParsed)||(node.childNodes[i].childsCount>0)) |
3613
|
|
|
{ |
3614
|
|
|
if (!z) z=""+node.childNodes[i].id; |
3615
|
|
|
else z+=this.dlmtr+node.childNodes[i].id; |
3616
|
|
|
|
3617
|
|
|
if (node.childNodes[i].unParsed) |
3618
|
|
|
var zb=this._getAllFatItemsXML(node.childNodes[i].unParsed,1); |
3619
|
|
|
else |
3620
|
|
|
var zb=this._getAllFatItems(node.childNodes[i]) |
3621
|
|
|
|
3622
|
|
|
if (zb) z+=this.dlmtr+zb; |
3623
|
|
|
} |
3624
|
|
|
} |
3625
|
|
|
return z; |
3626
|
|
|
}; |
3627
|
|
|
|
3628
|
|
|
/** |
3629
|
|
|
* @desc: Returns the list of all items which have child nodes, separated by default delimiter. |
3630
|
|
|
* @type: public |
3631
|
|
|
* @return: list of all items which has child nodes, separated by default delimiter. |
3632
|
|
|
* @topic: 6 |
3633
|
|
|
*/ |
3634
|
|
|
dhtmlXTreeObject.prototype.getAllItemsWithKids =function(){ |
3635
|
|
|
return this._getAllFatItems(this.htmlNode); |
3636
|
|
|
} |
3637
|
|
|
dhtmlXTreeObject.prototype.getAllFatItems=dhtmlXTreeObject.prototype.getAllItemsWithKids; |
3638
|
|
|
|
3639
|
|
|
|
3640
|
|
|
|
3641
|
|
|
/** |
3642
|
|
|
* @desc: return list of identificators of nodes with checked checkboxes, separated by default delimiter |
3643
|
|
|
* @type: public |
3644
|
|
|
* @return: list of ID of items with checked checkboxes, separated by default delimiter |
3645
|
|
|
* @topic: 5 |
3646
|
|
|
*/ |
3647
|
|
|
dhtmlXTreeObject.prototype.getAllChecked=function(){ |
3648
|
|
|
return this._getAllChecked("","",1); |
3649
|
|
|
} |
3650
|
|
|
/** |
3651
|
|
|
* @desc: return list of identificators of nodes with unchecked checkboxes, separated by default delimiter |
3652
|
|
|
* @type: public |
3653
|
|
|
* @return: list of ID of items with unchecked checkboxes, separated by default delimiter |
3654
|
|
|
* @topic: 5 |
3655
|
|
|
*/ |
3656
|
|
|
dhtmlXTreeObject.prototype.getAllUnchecked=function(itemId){ |
3657
|
|
|
if (itemId) |
3658
|
|
|
itemId=this._globalIdStorageFind(itemId); |
3659
|
|
|
return this._getAllChecked(itemId,"",0); |
3660
|
|
|
} |
3661
|
|
|
|
3662
|
|
|
|
3663
|
|
|
/** |
3664
|
|
|
* @desc: return list of identificators of nodes with third state checkboxes, separated by default delimiter |
3665
|
|
|
* @type: public |
3666
|
|
|
* @return: list of ID of items with third state checkboxes, separated by default delimiter |
3667
|
|
|
* @topic: 5 |
3668
|
|
|
*/ |
3669
|
|
|
dhtmlXTreeObject.prototype.getAllPartiallyChecked=function(){ |
3670
|
|
|
return this._getAllChecked("","",2); |
3671
|
|
|
} |
3672
|
|
|
|
3673
|
|
|
|
3674
|
|
|
/** |
3675
|
|
|
* @desc: return list of identificators of nodes with checked and third state checkboxes, separated by default delimiter |
3676
|
|
|
* @type: public |
3677
|
|
|
* @return: list of ID of items with checked and third state checkboxes, separated by default delimiter |
3678
|
|
|
* @topic: 5 |
3679
|
|
|
*/ |
3680
|
|
|
dhtmlXTreeObject.prototype.getAllCheckedBranches=function(){ |
3681
|
|
|
var temp = [this._getAllChecked("","",1)]; |
3682
|
|
|
var second = this._getAllChecked("","",2); |
3683
|
|
|
if (second) temp.push(second); |
3684
|
|
|
return temp.join(this.dlmtr); |
3685
|
|
|
} |
3686
|
|
|
|
3687
|
|
|
/** |
3688
|
|
|
* @desc: return list of identificators of nodes with checked checkboxes |
3689
|
|
|
* @type: private |
3690
|
|
|
* @param: node - node object (optional, used by private methods) |
3691
|
|
|
* @param: list - initial identificators list (optional, used by private methods) |
3692
|
|
|
* @topic: 5 |
3693
|
|
|
*/ |
3694
|
|
|
dhtmlXTreeObject.prototype._getAllChecked=function(htmlNode,list,mode){ |
3695
|
|
|
if (!htmlNode) htmlNode=this.htmlNode; |
3696
|
|
|
|
3697
|
|
|
if (htmlNode.checkstate==mode) |
3698
|
|
|
if (!htmlNode.nocheckbox) { if (list) list+=this.dlmtr+htmlNode.id; else list=""+htmlNode.id; } |
3699
|
|
|
var j=htmlNode.childsCount; |
3700
|
|
|
for (var i=0; i<j; i++) |
3701
|
|
|
{ |
3702
|
|
|
list=this._getAllChecked(htmlNode.childNodes[i],list,mode); |
3703
|
|
|
}; |
3704
|
|
|
|
3705
|
|
|
|
3706
|
|
|
if (list) return list; else return ""; |
|
|
|
|
3707
|
|
|
}; |
3708
|
|
|
|
3709
|
|
|
/** |
3710
|
|
|
* @desc: set individual item style |
3711
|
|
|
* @type: public |
3712
|
|
|
* @param: itemId - node id |
3713
|
|
|
* @param: styleString - valid CSS string |
3714
|
|
|
* @param: resetCss - reset current style : 0/1 |
3715
|
|
|
* @topic: 2 |
3716
|
|
|
*/ |
3717
|
|
|
dhtmlXTreeObject.prototype.setItemStyle=function(itemId,style_string,resetCss){ |
3718
|
|
|
var resetCss= resetCss|| false; |
3719
|
|
|
var temp=this._globalIdStorageFind(itemId); |
3720
|
|
|
if (!temp) return 0; |
3721
|
|
|
if (!temp.span.style.cssText) |
3722
|
|
|
temp.span.setAttribute("style",temp.span.getAttribute("style")+"; "+style_string); |
3723
|
|
|
else |
3724
|
|
|
temp.span.style.cssText = resetCss? style_string : temp.span.style.cssText+";"+style_string; |
3725
|
|
|
} |
3726
|
|
|
|
3727
|
|
|
/** |
3728
|
|
|
* @desc: enable draging item image with item text |
3729
|
|
|
* @type: public |
3730
|
|
|
* @param: mode - true/false |
3731
|
|
|
* @topic: 1 |
3732
|
|
|
*/ |
3733
|
|
|
dhtmlXTreeObject.prototype.enableImageDrag=function(mode){ |
3734
|
|
|
this._itim_dg=convertStringToBoolean(mode); |
3735
|
|
|
} |
3736
|
|
|
|
3737
|
|
|
/** |
3738
|
|
|
* @desc: set function called when tree item draged over another item |
3739
|
|
|
* @param: func - event handling function |
3740
|
|
|
* @type: depricated |
3741
|
|
|
* @edition: Professional |
3742
|
|
|
* @topic: 4 |
3743
|
|
|
* @event: onDragIn |
3744
|
|
|
* @depricated: use grid.attachEvent("onDragIn",func); instead |
3745
|
|
|
* @eventdesc: Event raised when item draged other other dropable target |
3746
|
|
|
* @eventparam: ID draged item |
3747
|
|
|
* @eventparam: ID potencial drop landing |
3748
|
|
|
* @eventparam: source object |
3749
|
|
|
* @eventparam: target object |
3750
|
|
|
* @eventreturn: true - allow drop; false - deny drop; |
3751
|
|
|
*/ |
3752
|
|
|
dhtmlXTreeObject.prototype.setOnDragIn=function(func){ |
3753
|
|
|
this.attachEvent("onDragIn",func); |
3754
|
|
|
}; |
3755
|
|
|
|
3756
|
|
|
/** |
3757
|
|
|
* @desc: enable/disable auto scrolling while drag-and-drop |
3758
|
|
|
* @type: public |
3759
|
|
|
* @param: mode - enabled/disabled |
3760
|
|
|
* @topic: 0 |
3761
|
|
|
*/ |
3762
|
|
|
dhtmlXTreeObject.prototype.enableDragAndDropScrolling=function(mode){ this.autoScroll=convertStringToBoolean(mode); }; |
3763
|
|
|
|
3764
|
|
|
|
3765
|
|
|
dhtmlXTreeObject.prototype.setSkin=function(name){ |
3766
|
|
|
var tmp = this.parentObject.className.replace(/dhxtree_[^ ]*/gi,""); |
3767
|
|
|
this.parentObject.className= tmp+" dhxtree_"+name; |
3768
|
|
|
if (name == "dhx_terrace") |
3769
|
|
|
this.enableTreeLines(false); |
3770
|
|
|
}; |
3771
|
|
|
|
3772
|
|
|
//tree |
3773
|
|
View Code Duplication |
(function(){ |
3774
|
|
|
|
3775
|
|
|
dhtmlx.extend_api("dhtmlXTreeObject",{ |
3776
|
|
|
_init:function(obj){ |
3777
|
|
|
return [obj.parent,(obj.width||"100%"),(obj.height||"100%"),(obj.root_id||0)]; |
3778
|
|
|
}, |
3779
|
|
|
auto_save_selection:"enableAutoSavingSelected", |
3780
|
|
|
auto_tooltip:"enableAutoTooltips", |
3781
|
|
|
checkbox:"enableCheckBoxes", |
3782
|
|
|
checkbox_3_state:"enableThreeStateCheckboxes", |
3783
|
|
|
checkbox_smart:"enableSmartCheckboxes", |
3784
|
|
|
context_menu:"enableContextMenu", |
3785
|
|
|
distributed_parsing:"enableDistributedParsing", |
3786
|
|
|
drag:"enableDragAndDrop", |
3787
|
|
|
drag_copy:"enableMercyDrag", |
3788
|
|
|
drag_image:"enableImageDrag", |
3789
|
|
|
drag_scroll:"enableDragAndDropScrolling", |
3790
|
|
|
editor:"enableItemEditor", |
3791
|
|
|
hover:"enableHighlighting", |
3792
|
|
|
images:"enableTreeImages", |
3793
|
|
|
image_fix:"enableIEImageFix", |
3794
|
|
|
image_path:"setImagePath", |
3795
|
|
|
lines:"enableTreeLines", |
3796
|
|
|
loading_item:"enableLoadingItem", |
3797
|
|
|
multiline:"enableMultiLineItems", |
3798
|
|
|
multiselect:"enableMultiselection", |
3799
|
|
|
navigation:"enableKeyboardNavigation", |
3800
|
|
|
radio:"enableRadioButtons", |
3801
|
|
|
radio_single:"enableSingleRadioMode", |
3802
|
|
|
rtl:"enableRTL", |
3803
|
|
|
search:"enableKeySearch", |
3804
|
|
|
smart_parsing:"enableSmartXMLParsing", |
3805
|
|
|
smart_rendering:"enableSmartRendering", |
3806
|
|
|
text_icons:"enableTextSigns", |
3807
|
|
|
xml:"loadXML", |
3808
|
|
|
skin:"setSkin" |
3809
|
|
|
},{}); |
3810
|
|
|
|
3811
|
|
|
})(); |
3812
|
|
|
|
3813
|
|
|
dhtmlXTreeObject.prototype._dp_init=function(dp){ |
3814
|
|
|
dp.attachEvent("insertCallback", function(upd, id, parent) { |
3815
|
|
|
var data = this._loader.doXPath(".//item",upd); |
3816
|
|
|
var text = data[0].getAttribute('text'); |
3817
|
|
|
this.obj.insertNewItem(parent, id, text, 0, 0, 0, 0, "CHILD"); |
3818
|
|
|
}); |
3819
|
|
|
|
3820
|
|
|
dp.attachEvent("updateCallback", function(upd, id, parent) { |
3821
|
|
|
var data = this._loader.doXPath(".//item",upd); |
3822
|
|
|
var text = data[0].getAttribute('text'); |
3823
|
|
|
this.obj.setItemText(id, text); |
3824
|
|
|
if (this.obj.getParentId(id) != parent) { |
3825
|
|
|
this.obj.moveItem(id, 'item_child', parent); |
3826
|
|
|
} |
3827
|
|
|
this.setUpdated(id, true, 'updated'); |
3828
|
|
|
}); |
3829
|
|
|
|
3830
|
|
|
dp.attachEvent("deleteCallback", function(upd, id, parent) { |
3831
|
|
|
this.obj.setUserData(id, this.action_param, "true_deleted"); |
3832
|
|
|
this.obj.deleteItem(id, false); |
3833
|
|
|
}); |
3834
|
|
|
|
3835
|
|
|
dp._methods=["setItemStyle","","changeItemId","deleteItem"]; |
3836
|
|
|
this.attachEvent("onEdit",function(state,id){ |
3837
|
|
|
if (state==3) |
3838
|
|
|
dp.setUpdated(id,true) |
3839
|
|
|
return true; |
3840
|
|
|
}); |
3841
|
|
|
this.attachEvent("onDrop",function(id,id_2,id_3,tree_1,tree_2){ |
3842
|
|
|
if (tree_1==tree_2) |
3843
|
|
|
dp.setUpdated(id,true); |
3844
|
|
|
}); |
3845
|
|
|
this._onrdlh=function(rowId){ |
3846
|
|
|
var z=dp.getState(rowId); |
3847
|
|
|
if (z=="inserted") { dp.set_invalid(rowId,false); dp.setUpdated(rowId,false); return true; } |
3848
|
|
|
if (z=="true_deleted") { dp.setUpdated(rowId,false); return true; } |
3849
|
|
|
|
3850
|
|
|
dp.setUpdated(rowId,true,"deleted") |
3851
|
|
|
return false; |
3852
|
|
|
}; |
3853
|
|
|
this._onradh=function(rowId){ |
3854
|
|
|
dp.setUpdated(rowId,true,"inserted") |
3855
|
|
|
}; |
3856
|
|
|
dp._getRowData=function(rowId){ |
3857
|
|
|
var data = {}; |
3858
|
|
|
var z=this.obj._globalIdStorageFind(rowId); |
3859
|
|
|
var z2=z.parentObject; |
3860
|
|
|
|
3861
|
|
|
var i=0; |
3862
|
|
|
for (i=0; i<z2.childsCount; i++) |
3863
|
|
|
if (z2.childNodes[i]==z) break; |
3864
|
|
|
|
3865
|
|
|
data["tr_id"] = z.id; |
3866
|
|
|
data["tr_pid"] = z2.id; |
3867
|
|
|
data["tr_order"] = i; |
3868
|
|
|
data["tr_text"] = z.span.innerHTML; |
3869
|
|
|
|
3870
|
|
|
z2=(z._userdatalist||"").split(","); |
3871
|
|
|
for (i=0; i<z2.length; i++) |
3872
|
|
|
data[z2[i]]=z.userData["t_"+z2[i]]; |
3873
|
|
|
|
3874
|
|
|
return data; |
3875
|
|
|
}; |
3876
|
|
|
}; |
3877
|
|
|
|
3878
|
|
|
//(c)dhtmlx ltd. www.dhtmlx.com |
|
|
|
|